【发布时间】:2017-02-14 09:33:49
【问题描述】:
我有一个抽象类,其中包含一个返回泛型类型的抽象方法。 让我们说
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
}
}
还有另一个类 Sample2,它是 Sample1 的子类。 当我尝试覆盖此类中的方法 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 。
【问题讨论】:
-
您可能对这个关于 Java 中的泛型返回类型的问题感兴趣:stackoverflow.com/questions/36654841/…
标签: java