我正在尝试学习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*/)

07-28 03:07
查看更多