当我尝试运行以下代码时,编译器会生成
线程“主”中的异常java.lang.RuntimeException:无法编译的源代码-错误的符号类型:JTOGenerics.ArrayCode.main(ArrayCode.java:17)上的JTOGenerics.ArrayCode.countGreaterThan 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);
}
}
您已经Comparable
在ArrayCode
类中定义了自己的接口。看来通用static
方法的类型绑定countGreaterThan
正在解析到该Comparable
接口。但是,改为Integer
实现内置java.lang.Comparable
接口。
删除自己的Comparable
界面,这意味着Comparable
将引用内置Comparable
界面。
另外,ArrayCode
该类不需要实现Comparable
自身(除非您在您的文章中没有看到其他非静态代码);您可以删除implements Comparable<T>
on ArrayCode
,ArrayCode
自己的T
类型参数和ArrayCode
的compareTo
方法。另外,您不需要Comparable<T>
在这种if
情况下强制转换为;没必要
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句