【发布时间】:2013-03-06 02:06:18
【问题描述】:
编辑:这个问题专门针对 Java 原始数组。还有其他一些问题可以解决为原始标量类型编写泛型方法的问题,但数组的不同之处足以保证保留这个问题以供将来参考(恕我直言)。
考虑以下 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 支持 '
【问题讨论】:
-
没关系,你说的是数组。不过,您的代码仍在使用单值泛型。
-
简答:否。长答:Nooooooooooooo。
-
@Louis 你让我很开心啊哈哈哈哈
标签: java arrays generics types primitive