我写了以下代码:
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在未知/任意类的情况下无法理解>
运算符。
同时,我不想为我知道将要发送的类的对象编写不同的方法。
是否有解决方法?
答案 0 :(得分: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));
答案 1 :(得分:3)
是的,通过向Comparable
添加T
上限,有一种解决方法。
由于<
运算符不能处理对象,因此必须使用等效功能,即compareTo
界面中的Comparable
方法。
通过提供上限确保T
类型为Comparable
。
private static <T extends Comparable<T>> T getMax(T[] array)
然后,代替>
运算符,请致电compareTo
:
if(array[i].compareTo(max) > 0)