我有一個父類Builder
可與Builder
類型或其子類型的參數泛型:泛型類和繼承問題
class Builder<T extends Builder> {
@SuppressWarnings("unchecked")
T doSmth() {
System.out.println("do smth");
return (T)this;
}
}
它有一個子類 - BuilderChild
:
class BuilderChild extends Builder<BuilderChild> {
BuilderChild doSmthElse() {
System.out.println("do smth else");
return this;
}
}
所以,我可以在BuilderChild
實例上調用方法doSmth
並返回BuilderChild
:
new BuilderChild().doSmth().doSmthElse();
但是,當我試圖generify BuilderChild
上面的行停止編譯。
class BuilderChild<T> extends Builder<BuilderChild> {
BuilderChild doSmthElse() {
System.out.println("do smth else");
return this;
}
}
...
//Compile error, because doSmth()
//returns Builder instead of BuilderChild.
new BuilderChild().doSmth().doSmthElse();
有人能解釋爲什麼doSmth()
開始返回Builder
我泛型BuilderChild
後?有什麼方法可以解決它嗎?