在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(原始数组)?
您的findMax
方法是通用的,使用声明的类型变量T
作为单个方法参数的类型。由于类型参数没有任何泛型边界,因此在该方法中,最多可以考虑使用Object
。
运算符<
(及其亲属)不能应用于引用类型(除了某些Number
子类型)。
泛型不适用于基元类型,因此您将无法使用基元类型的数组调用您的方法。
您必须重载每个基元类型数组的方法。
对于参考类型,请确保它们是Comparable
,通过向T
添加边界并使用compareTo
。
public static
@AlexWei请注意我说过的_some_'Number'子类型。这些是所有数字基元的包装类型。 ''运营商将与他们合作,但不是通用的。对于所有数字类型,您都无法获得泛型的此行为。 – 2014-10-19 03:52:24
2014-10-19 04:58:33
泛型不适用于基元。 – 2014-10-19 03:35:41