java - 为什么这种在 Java 数组中查找最大数组的通用方法无法编译?

标签 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;
  }

但我收到一条错误消息:二进制运算符 '>' 的错误操作数类型我应该怎么做?

最佳答案

您只能对数值类型使用比较运算符。如果你想比较泛型类型,你必须确保它们实现了 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/

相关文章:

java - FindBugs 不会提示枚举中的不可序列化字段

java - 使用 Java 将测试结果传递给 Selenium 中的 ITestResult

java - Swing GUI 未显示错误但未运行

javascript - 测试文本区域中数组中的所有关键字

ios - Swift Array.indexOf 包含 nil 值

Java 通用通配符列表<?扩展 Animal> 动物 = new ArrayList<>()

java - 泛型:如何在 Map 中强制执行键和值之间的限制

java - 它是否有助于 GC 使 Java 中的局部变量为空

java - 使用 String#split() 分割表达式

Java 泛型和类型推断