我正在尝试学习 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*/)
关于java - 为什么这种在 Java 数组中查找最大数组的通用方法无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45829471/