私は 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 に Type <T> を与える (つまり、DailyValueCalculator<T> にする) すべてのサブクラスは、T がサブクラスの型と等しい場所を指定し、intern() が T を返すようにする必要があります。