我有一个名为Calculator的类,它被许多其他类扩展。它有一个名为intern()的方法,其内容如下:
public DailyValueCalculator intern() {
if (TimeSeriesIterator.containsMatchingCalculator(this)) {
TimeSeriesIterator.removeCalculator(this);
return TimeSeriesIterator.getMatchingCalculator(this);
} else {
return this;
}
}
如果我有一个名为bc的BetaCalculator,我希望能够通过说
来实习它。bc = bc.intern();
目前虽然我不得不说
bc = (BetaCalculator) bc.intern();
是否有任何方法可以使intern()方法始终具有调用它的类型的返回类型?如果没有办法做到这一点,有没有理由说不可能?
我知道的可能的解决方案虽然不满意:
将intern()方法传递给Class并让它返回T(例如
< T extends DailyValueCalculator> T intern(Class< T> returnType){...}
为DailyValueCalculator提供类型< T> (即使它成为DailyValueCalculator< T>)所有子类都需要指定T等于子类的类型然后让intern()返回T.
答案 0 :(得分:3)
如果您自己键入超类,则可以执行此操作。这是一个例子:
public abstract class SuperClass<S extends SuperClass<S>> {
public S intern() {
return (S) this;
}
public static class SubClass extends SuperClass<SubClass> {
private void methodOnlyInSubClass() {
System.out.println("subclass method");
}
public void myMethod() {
SubClass sub = intern();
sub.methodOnlyInSubClass();
}
}
}
答案 1 :(得分:-1)
没有办法做到这一点。想想看:我知道你知道实习方法只会返回同一个类,但编译器怎么可能?