在java中实现一个简单的泛型函数时编译错误?

时间:2014-10-19 03:35:00

标签: java generics

这是我的代码:

public class ArrayAlgorithm {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        return ;
    }


    public static <T> T findMax(T[]a)
    {
        T max=a[0];
        for (T t : a) {
            if(max<t)   //this line generate compile error
                max=t;
        }
        return max;
    }

}

在行中:if(max<t)生成错误:运算符&lt;没有为参数T

定义

在我搜索谷歌之后,似乎我应该做出类比这样的事情,这对于一个简单的任务来说太复杂了。因为我只想实现简单的findmax(原始数组)。

任何使这个编译错误消失的建议或如何轻松实现这个简单的findmax(原始数组)?

1 个答案:

答案 0 :(得分:4)

您的findMax方法是通用的,使用声明的类型变量T作为单个方法参数的类型。由于类型参数不具有任何通用边界,因此在该方法中,最多可以考虑Object

运算符<(及其亲属)无法应用于引用类型(某些Number子类型除外)。

泛型不适用于原始类型,因此您无法使用基本类型数组调用您的方法。

您必须为每个基本类型数组重载该方法。

对于参考类型,请通过向Comparable添加绑定并使用T来确保它们为compareTo