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”看起来很奇怪我。还有其他方法可以实现吗?任何“协变参数类型”? :-)