我有一个名为 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() 方法
将 intern() 方法传递给一个 Class 并让它返回一个 T(例如
<T extends DailyValueCalculator> T intern(Class<T> returnType){...}
给 DailyValueCalculator 一个类型 <T>(即使其成为 DailyValueCalculator<T>),所有子类都需要指定 T 等于子类的类型,然后让 intern() 返回一个 T。