方法里的泛型参数为什么不能直接使用比较运算符做判断?

题目描述

问题背景:在设计一个泛型的获取数组最小值的函数.并且这个方法只能接受Number的子类并且实现了Comparable接口。

题目来源及自己的思路

Number类的子类中实现的compareTo方法,也是使用比较运算符做判断

public int compareTo(Integer anotherInteger) {
        return compare(this.value, anotherInteger.value);
    }
public static int compare(int x, int y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    }

错误代码,编译报错

 public static  <T extends Number & Comparable<? super T>> T method(T[] values) {
        if (values == null || values.length == 0) return null;
        T min = values[0];
        for (int i = 1; i < values.length; i++) {
            if (min.compareTo(values[i]) > 0) min = values[i];
            //为什么不能使用比较运算符,编译报错
            // if (values[i] > min) min = values[i];
        }
        return min;
    }

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 2.5k
2 个回答

Java不支持运算符重载(C++可以),除了基本数据类型,对象是不能用<比较的,而Java的泛型类型只能是类,不能是基本数据类型(C++可以)。

因为 Number 不是基本数字类型,也不是基本数字类型的包装类型,所以不能用比较运算符

推荐问题