这是我的代码:
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)
生成错误:运算符 < 没有为参数 T 定义
在我搜索谷歌之后,似乎我应该做类似的东西,对于一个简单的任务来说太复杂了。因为我只想实现简单的 findmax(原始数组)。
有什么建议可以消除此编译错误或如何轻松实现这个简单的 findmax(原始数组)?
最佳答案
你的 findMax
方法是通用的,使用声明的类型变量 T
作为单个方法参数的类型。由于类型参数没有任何泛型边界,因此在方法中,最多可以将其视为 Object
。 .
运营商<
(及其亲属)不能应用于引用类型(某些 Number
子类型除外)。
泛型不适用于原始类型,因此您将无法使用原始类型数组调用您的方法。
您必须为每个基本类型数组重载该方法。
对于引用类型,确保它们是 Comparable
通过向 T
添加绑定(bind)并使用 compareTo
.
关于java - 在 java 中实现一个简单的泛型函数时出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447035/