这是我的代码:
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(原始数组)?
答案 0 :(得分:4)
您的findMax
方法是通用的,使用声明的类型变量T
作为单个方法参数的类型。由于类型参数不具有任何通用边界,因此在该方法中,最多可以考虑Object
。
运算符<
(及其亲属)无法应用于引用类型(某些Number
子类型除外)。
泛型不适用于原始类型,因此您无法使用基本类型数组调用您的方法。
您必须为每个基本类型数组重载该方法。
对于参考类型,请通过向Comparable
添加绑定并使用T
来确保它们为compareTo
。