我正在尝试学习Java中的泛型,并且我曾经以为这种方法可以在数组中找到最大的方法:
public static <T> T largestInArray(T[] inputArray){
T largest = inputArray[0];
for (int i = 1; i < inputArray.length - 1; i++){
if (inputArray[i] > largest)
largest = inputArray[i];
}
return largest;
}
但我收到一条错误消息:二进制运算符'>'的操作数类型错误我该怎么做?
最佳答案
您只能在数字类型上使用比较运算符。如果要比较通用类型,则必须确保它们实现 Comparable
,并调用Comparable.compare()
:
public static <T extends Comparable<? super T>> T largestInArray(T[] inputArray) {
//...
if (inputArray[i].compareTo(largest) > 0) {
//...
}
compareTo()
将返回相等值的0;如果目标对象具有优先权,则返回0;如果参数具有优先权,则返回> 0。另外,您可以使用自定义
Comparator
而不是自然顺序:public static <T> T largestInArray(T[] inputArray, Comparator<? super T> comparator) {
//...
if (comparator.compare(inputArray[i], largest) > 0) {
//...
}
compare()
的工作方式与上述compareTo()
类似。请注意,它们都已经实现为
Collections
帮助器,您可以通过包装数组轻松地调用它们:Collections.max(Arrays.asList(inputArray)/*, comparator*/)