Der*_*rry 3 java arrays generics
我正在尝试用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;
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误说:二进制运算符的错误操作数类型'>'我应该怎么做?
shm*_*sel 12
您只能在数字类型上使用比较运算符.如果要比较泛型类型,则必须确保它们实现Comparable,并调用Comparable.compare():
public static <T extends Comparable<? super T>> T largestInArray(T[] inputArray) {
//...
if (inputArray[i].compareTo(largest) > 0) {
//...
}
Run Code Online (Sandbox Code Playgroud)
compareTo() 将返回0表示相等的值,如果目标对象具有优先权,则返回<0;如果参数优先,则返回> 0.
或者,您可以使用自定义Comparator而不是依赖于自然顺序:
public static <T> T largestInArray(T[] inputArray, Comparator<? super T> comparator) {
//...
if (comparator.compare(inputArray[i], largest) > 0) {
//...
}
Run Code Online (Sandbox Code Playgroud)
compare()与compareTo()上面的工作类似.
请注意,这些都已经实现为Collections帮助程序,您可以通过包装数组轻松调用它们:
Collections.max(Arrays.asList(inputArray)/*, comparator*/)
Run Code Online (Sandbox Code Playgroud)