編集:この質問は特にJavaプリミティブ配列に関するものです。プリミティブスカラー型のジェネリックメソッドの記述に対処する他の質問がありますが、配列は十分に異なっているため、将来の参照(IMHO)のためにこの質問を保持する必要があります。
次のJavaメソッドを検討してください。
private int maxIndex(double[] values, double[] maxOut)
{
int index = 0;
double max = values[index];
for (int i = 1; i < values.length; i++) {
if (max < values[i]) {
max = values[i];
index = i;
}
}
if (maxOut != null) {
maxOut[0] = max;
}
return index;
}
プリミティブ数値タイプのいずれかで機能するこの汎用バージョンを作成する方法はありますか?例として、私は以下を試しました:
private <T extends Comparable<T>> int maxIndexDoesNotWork(T[] values, T[] maxOut)
{
int index = 0;
T max = values[index];
for (int i = 1; i < values.length; i++) {
if (max.compareTo(values[i]) < 0) {
max = values[i];
index = i;
}
}
if (maxOut != null) {
maxOut[0] = max;
}
return index;
}
おそらく、プリミティブ型の配列では自動ボクシングが行われないため、機能しません。もちろん、ボクシングが本当に欲しいというわけではありません。私が本当に望んでいるのは、Tが「<」演算子をサポートしていることをコンパイラー/ランタイムに伝えられるようにすることです。方法はありますか?