0
再帰を介してNumber(the class)型の数の累乗を計算する関数を作成したいと考えています。バインドされた汎用型のバイナリ計算
return base * NumberOpp.power(base, pow - 1);
「*」操作の実行方法はわかりません。次の行に問題があります。私はこれがジェネリック型のためだと推測しています。私はこの問題を解決すると考えている。私はキャストしようとしました(少し醜いです)。どちらもうまくいきませんでした。
return (T) (Number.doubleValue(base) * Number.doubleValue(NumberOpp.power(base, pow - 1)));
すべてのコードは以下の通りです:
public class NumberOpp {
public static <T extends Number> T power(T base, int pow){
if (pow == 1) { /* If power is one return base */
return base;
}else{ /* Else recursivly multiply by base until power is one */
return base * NumberOpp.power(base, pow - 1);
}
}
}
[Javaが既に提供している実装](https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#pow)を使用しない理由はありますか? (double、%20double))? –
'*'乗算演算子は数値*プリミティブ*でのみ動作します。定義上、Javaのジェネリック型はプリミティブではありえないので、戻り値の型 'T'は' * '乗算演算子と互換性がありません。自動ボックス化でさえも、コンパイラが行うものなのでどの型が 'T 'であるのかわからないので、どのアンボクシング操作を適用するのか分からない(int?long?double?...)。 – Andreas
短い答え:再帰の使い方を学ぶのは割り当てです。しかし、私は将来ジェネリック医薬品を扱うことを望むかもしれません。 – macrocypher