「不能從類型變量選擇」 我有以下類別:爲什麼
public abstract class A {
public String att;
public static abstract class Builder<T extends A> {
public T a;
public abstract T build();
public T.Builder setAtt(String a) {
this.a.att = a;
return this;
}
}
}
public class A1 extends A {
public static class Builder extends A.Builder<A1> {
public Builder() {
this.a = new A1();
}
public A1 build() {
return this.a;
}
}
}
public class A2 extends A {
public String subAtt;
public static class Builder extends A.Builder<A2> {
public Builder() {
this.a = new A2();
}
public A2 build() {
return this.a;
}
public Builder setSubAtt(String subAtt) {
a.subAtt = subAtt;
return this;
}
}
}
爲什麼我會收到「不能選擇從類型變量「出錯A.setAtt
?
類型刪除不適用。 T
是A1
或A2
,但這在編譯時已知。
那麼我該如何返回子類構建器呢?我的主要目標是能夠在setter混合子類和超類之後做setter。
你能分享一下觸發錯誤的代碼嗎?將代碼粘貼到IDE中不會觸發編譯錯誤。 – dasblinkenlight 2015-02-10 14:28:55
類型擦除確實適用,因爲人們可以輕鬆地創建另一個類,從外部擴展A,並且系統會中斷。 – Clashsoft 2015-02-10 14:29:30
那麼有沒有辦法做到這一點? – Gust 2015-02-10 14:51:18