Java错误:二元运算符的错误操作数类型<

时间:2018-04-21 23:48:49

标签: java arrays generics operator-keyword operand

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));

  }

}

我收到以下错误。我不明白为什么我不能使用&lt;,如果T是一个类型变量而不是一个对象?

  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是一个好主意。如果没有,我应该如何定义整数数组?

谢谢!

1 个答案:

答案 0 :(得分:2)

arr[i]包含一些Object通用类型T。您无法在<上使用Object运算符。

请改为:

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;
    }
    // ...