我有一个名为计算器的类,它被许多其他类扩展。它有一个名为 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() 方法
向 intern() 方法传递 a 类并让它返回一个 T(例如
如果你用它自己输入你的超类,你可以做到这一点。下面是一个示例:
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(); } } }
不,没有办法做到这一点。想一想:我知道你知道 intern 方法只会返回相同的类,但编译器怎么可能呢?