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

问题描述:

这里是我的代码:在java中实现一个简单的通用函数时编译错误?

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)产生错误:运营商<没有为参数定义牛逼

我搜索谷歌之后,似乎我应该做可比性这样的事情是太复杂为一个简单的任务。因为我只想实现简单的findmax(原始数组)。

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

+0

泛型不适用于基元。 – 2014-10-19 03:35:41

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

运算符<(及其亲属)不能应用于引用类型(除了某些Number子类型)。

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

您必须重载每个基元类型数组的方法。

对于参考类型,请确保它们是Comparable,通过向T添加边界并使用compareTo

+0

public static T findMax(T [] a)为什么这也不起作用?还是一样的错误。因为我认为T作为Number的子类型应该支持 AlexWei 2014-10-19 03:50:19

+1

@AlexWei请注意我说过的_some_'Number'子类型。这些是所有数字基元的包装类型。 ''运营商将与他们合作,但不是通用的。对于所有数字类型,您都无法获得泛型的此行为。 – 2014-10-19 03:52:24

+0

2014-10-19 04:58:33