是否有一种模板化方法的模板,以便抽象方法的参数与实现子类的类型相同?换句话说,如果我们有:
class Super {
abstract void a_method( <Sub> param );
}
class Sub_A extends Super {
void a_method( Sub_A param ){
...
}
class Sub_B extends Super {
void a_method( Sub_B param ){
...
}
}
然后每个子类将其自身的类型用作此方法的参数。我想避免使用界面或反射。
通常的方法是引入一个通用参数:
abstract class Super<Sub extends Super> {
abstract void a_method(Sub param);
}
class Sub_A extends Super<Sub_A> {
void a_method(Sub_A param) {
}
}
class Sub_B extends Super<Sub_B> {
void a_method(Sub_B param) {
}
}
据我所知,您不能强迫子类将自身传递为T
,例如可以定义class Sub_C extends Super<Sub_A>
。不知道这是否是一个问题。