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

5

我写了以下代码:

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无法理解>运算符。
同时,我也不想为我知道将要发送的类的对象编写不同的方法。 是否有解决方法?

2
你最好的选择是强制类型T必须是可比较的。你可以将其更改为<T extends Comparable<? super T>>,然后使用compareTo - Alexis C.
或者使用 Comparator - fabian
2个回答

7

您需要将 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));

3

是的,有一种解决方法,就是给T添加一个Comparable上界。

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

通过提供一个上界,确保类型T是可比较的。

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

然后,用compareTo代替>操作符:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接