我有一個抽象類,它包含一個抽象方法,它返回一個泛型類型。 可以說如何覆蓋Java中的泛型返回類型的方法在多級別繼承的情況下
abstract class AbstractSample{
//class members
//this method needs to be overriden
public abstract SampleBuilder<? extends AbstractSample,?> copyBuilder();
//other methods
//builder
public static abstract class SampleBuilder<T extends AbstractSample, B extends SampleBuilder<T,B>> {
//properties
private String as;
public SampleBuilder(AbstractSample object) {
this.as = object.as;
}
public B as(String as) {
this.as = as;
return (B)this;
}
public abstract T build();
}
}
現在我有一個類的Sample1它擴展此類和實現方法copyBuilder()
public class Sample1 extends AbstractSample {
//class members
@Override
public AbstractSample.SampleBuilder<Sample1,Sample1.Builder> copyBuilder() {
return new Sample1.Builder(this);
}
//other methods
//builder
public static class Builder extends SampleBuilder<Sample1,Builder> {
//implementation
//containing members and methods
}
}
還有一種類樣品2是樣本1的子類。 當我嘗試重寫此類中的方法copyBuilder()時,我遇到了返回類型中的問題。
class Sample2 extends Sample1 {
//class members
// I am not allowed to implement this as below
@Override
public AbstractSample.SampleBuilder<Sample2,Sample2.Builder> copyBuilder() {
return new Sample2.Builder(this) ;
}
//other methods
//builder
public static class Builder extends SampleBuilder<Sample2,Builder> {
//implementation
//containing members and methods
}
}
IntelliJ說方法與超類中的方法衝突,試圖使用不兼容的返回類型。
任何人都可以建議如何在Sample2中實現方法copyBuilder(),以便它返回Sample2.Builder。
你可能有興趣在這個問題上它的工作關於通用返回類型es在Java中:http://stackoverflow.com/questions/36654841/java-compile-error-in-method-with-generic-return-type – jaco0646