如何编写泛型 Java 方法并比较方法内泛型类型的两个变量?

How do I write generic Java method and compare two variables of the generic type inside the method?

我写了下面的代码:

private static <T> T getMax(T[] array) {
        if(array.length == 0) {
            return null;
        }

        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max)
                max = array[i];
        }
        return max;
    }

问题出在这一行:if(array[i] > max)

我了解 Java 无法理解 unknown/arbitrary 类 中的 > 运算符。

同时,我不想为我知道要发送的 类 的对象编写不同的方法。

有解决办法吗?

您需要将T更改为T extends Comparable<T>并使用compareTo方法。即:

  • private static <T extends Comparable<T>> T getMax(T[] array),以及
  • if (array[i].compareTo(max) > 0) { ... }

但请注意,您可以使用

maxElement = Collections.max(Arrays.asList(array));

是的,有一个解决方法,即在 T 上添加 Comparable 上限。

因为 < 运算符不适用于对象,您必须使用等效功能,即 Comparable 接口中的 compareTo 方法。

通过提供上限确保类型 TComparable

private static <T extends Comparable<T>> T getMax(T[] array)

然后,代替 > 运算符,调用 compareTo:

if(array[i].compareTo(max) > 0)