Ich habe eine abstrakte Klasse, die eine abstrakte Methode enthält, die einen generischen Typ zurückgibt. können sagenWie überschreibt Methoden mit generischen Rückgabetyp in Java im Falle von Vererbung auf mehreren Ebenen
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();
}
}
Jetzt habe ich eine Klasse Sample1 haben, die diese Klasse erweitert und implementiert die Methode 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
}
}
Es gibt eine andere Klasse Sample2, die eine Unterklasse von Sample1 ist. Wenn ich versuche, die Methode copyBuilder() in dieser Klasse zu überschreiben, bekomme ich Probleme im Rückgabetyp.
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 sagt die Methode kollidiert mit dem in der übergeordneten Klasse und versuchte inkompatibel Rückgabetyp zu verwenden.
Kann jemand vorschlagen, wie Sie die Methode copyBuilder() in Sample2 implementieren, so dass Sample2.Builder zurückgegeben wird.
Sie in dieser Frage interessiert sein bezüglich generischer Rückgabetyp es in Java: http://stackoverflow.com/questions/36654841/java-compile-error-in-method-with-generic-return-type – jaco0646