2
我想重寫一個方法,並用它的子類替換它所需的參數。抽象類A <T extends A>有沒有更好的解決方案?
對於返回類型,沒有問題,因爲它們不是方法簽名的一部分,可以用子類(稱爲「協變返回類型」)替換。對於論點來說,這是行不通的,因爲它們是簽名的一部分。
於是我想出瞭解決方案,使用相同類型的泛型參數:
public abstract class A<T extends A> {
public void loadValuesFrom(T source) {
...
}
}
public class B extends A<B> {
public void loadValuesFrom(B source) {
super.loadValuesFrom(source);
...
}
}
但聲明「公共抽象類A」看起來很奇怪我。還有其他方法可以實現嗎?任何「協變參數類型」? :-)