数値のコレクション全体の合計を出したいです。しかし、戻り値の種類を示したいと思います。たとえば、double コレクションの合計を計算したいのですが、Integer を取得したいとします。この SumAggregator のようなものが欲しいです。これが私が開発したコードですが、キャストの問題があります。
public class SumAggregator<N1 extends Number, N2 extends Number> {
public SumAggregator() {
}
public N2 sum(Collection<? extends N1> list){
Double sum = 0;
for(Number n : list){
sum += n.doubleValue();
}
return (N2) sum;
}
}
やりたいと思ったらSumAggregator<Double, Double>
何の問題もありません。しかし、実行したい場合はSumAggregator<Double, Integer>
、実行すると次の例外が発生します。
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer
これを解決する方法はありますか?