当我尝试运行下面的代码时,编译器会生成
线程中的异常" main" java.lang.RuntimeException:无法编译的源代码 - 错误的sym类型:JTOGenerics.ArrayCode.countGreaterThan 在JTOGenerics.ArrayCode.main(ArrayCode.java:17) Java结果:1
代码行下方有一条红线: int av = ArrayCode.countGreaterThan(marks,10);
我是Java的新手,由于我的知识有限,我试过并找不到错误,有人可以帮帮我吗?非常感谢提前!!
public class ArrayCode<T> implements Comparable<T> {
public static void main(String[] args) {
Integer[] marks = new Integer[] {12, 0, 15, 18, 4};
int av = ArrayCode.countGreaterThan(marks, 10);
System.out.println("the number of Marks that are greater than 10 is: " + av);
}
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
int count = 0;
for (T e : anArray) {
if (((Comparable<T>)e).compareTo(elem) > 0) {
++count;
}
}
return count;
}
@Override
public int compareTo(T o) {
if (this.equals(o)) {
return 1;
} else {
return 0;
}
}
public interface Comparable<T> {
public int compareTo(T o);
}
}
答案 0 :(得分:5)
您已在Comparable
课程中定义了自己的ArrayCode
界面。似乎通用static
方法countGreaterThan
的绑定类型正在解析为Comparable
接口。但是,Integer
实现了内置的java.lang.Comparable
接口。
删除您自己的Comparable
界面,这意味着Comparable
将引用内置的Comparable
界面。
此外,ArrayCode
课程本身并不需要实施Comparable
(除非您的帖子中没有其他非静态代码);您可以删除implements Comparable<T>
上的ArrayCode
,ArrayCode
自己的T
类型参数以及ArrayCode
&#39; s compareTo
方法也。另外,您不需要在Comparable<T>
条件下向if
投射;这是不必要的。
答案 1 :(得分:3)
这是因为您已经创建了自己的名为Comparable
的界面。
Integer
未实现您的版本。
我会摆脱你的版本。