java - 有没有一种方法可以编写与原始数组类型一起使用的通用 Java 方法?

标签 java arrays generics types primitive

编辑:这个问题特别涉及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 支持“<”运算符。有办法吗?

最佳答案

没有办法,因为与单个值的自动装箱不同,原始元素类型的集合/数组不会自动转换为其包装对象等效元素类型。

关于java - 有没有一种方法可以编写与原始数组类型一起使用的通用 Java 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15237695/

相关文章:

java - 为什么我的 jframe 不出现?

arrays - 如何在Rust中循环遍历整数向量?

java - 从java中的json数组中拆分json对象

Java - 声明泛型函数的正确方法?

java - 如何使用通配符模拟泛型方法的行为

c# - Type.IsGenericTypeDefinition 和 Type.ContainsGenericParameters 之间的区别

java - 如何将Cipher重置为初始化时的状态?

java - 如何使用多个不同矩阵中的值查找子序列?

java - 使用 TreeMap 作为 Person 对象类中的属性

javascript - 在 jQuery 中创建 JSON 对象数组