私はジェネリック型を返す抽象メソッドを含む抽象クラスを持っています。 は今、私はサンプル1のサブクラスである別のクラスサンプル2があり、このクラスを拡張し、メソッドcopyBuilderを(実装するクラスサンプル1)多値継承の場合にJavaで汎用戻り型のメソッドをオーバーライドする方法
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
}
}
を持って
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();
}
}
を言うことができます。 このクラスの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を返す方法を提案できますか?
を下回っているあなたは、この問題に興味がある可能性があり、それを動作させることができますジェネリックリターンtyp Javaの場合:http://stackoverflow.com/questions/36654841/java-compile-error-in-method-with-generic-return-type – jaco0646