【问题标题】:Java Error: Bad Operand Type for binary operator <Java 错误:二元运算符 < 的操作数类型错误
【发布时间】:2018-10-02 07:48:22
【问题描述】:
public class MaxMinArray<T>{

  private T getMin(T[] arr){

    T min = arr[0];
    for (int i = 0; i<arr.length; i++){
      min = (arr[i] < min) ? arr[i] : min;
    }
    return min;
  }

 public static void main(String[] args) {

  MaxMinArray<Integer> m = new MaxMinArray<Integer>();
  Integer[] arr = {1,2,3,4,5};
  System.out.println(m.getMin(arr));

  }

}

我收到以下错误。我不明白为什么我不能使用

  error: bad operand types for binary operator '<'
      if (arr[i] < min){
                 ^
  first type:  T
  second type: T
  where T is a type-variable:
    T extends Object declared in class MaxMinArray

另外,由于我将 T 用于泛型,将我的数组定义为 Integer 而不是 int 是否是个好主意。如果不是,我应该如何定义一个整数数组?

谢谢!

【问题讨论】:

  • 一个类型变量表示一个引用类型,所以就好像T 是一个对象类型。 (当编译器错误说 “其中T 是一个类型变量:T extends Object”时,编译器错误也暗示了这一点。。)

标签: java arrays generics operator-keyword operand


【解决方案1】:

arr[i] 包含一些泛型类型TObject。您不能在 Object 上使用 &lt; 运算符。

改为这样做:

public class MaxMinArray<T extends Comparable<T>> {

    private T getMin(T[] arr){
         T min = arr[0];
         for (int i = 0; i<arr.length; i++){
             min = (arr[i].compareTo(min) < 0) ? arr[i] : min;
         }
         return min;
    }
    // ...

【讨论】:

  • 是的,我忘记了泛型类型使用extends 表示接口而不是implements,通常我的IDE 会提醒我。 @Logan 感谢您的编辑。
  • 没问题。我还将 type 参数添加到 Comparable -- T extends Comparable&lt;T&gt;
  • @Logan 谢谢!你已经解决了我的下一个疑问。我收到原始类型警告,因为 Comparable 没有类型参数。
  • @noogler 没问题!是的,如果你只指定Comparable,它本质上就是Comparable&lt;Object&gt;
  • @noogler 抱歉,我的回答有点无聊,有点仓促,而且没有 IDE 来解决问题。
猜你喜欢
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多