java泛型方法,运行时错误,

Jes*_*ess 4 java

当我尝试运行下面的代码时,编译器会生成

线程"main"中的异常java.lang.RuntimeException:无法编译的源代码 - 错误的sym类型:JTOGenerics.ArrayCode.countGreaterThan at 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

rge*_*man 5

您已ComparableArrayCode类中定义了自己的界面.似乎泛型static方法的绑定类型countGreaterThan正在解析为该Comparable接口.但是,Integer实现内置java.lang.Comparable接口.

删除自己的Comparable界面,这意味着Comparable将引用内置Comparable界面.

此外,ArrayCode该类不需要实现Comparable自己(除非您的帖子中没有我们没有看到的其他非静态代码); 您可以删除implements Comparable<T>ArrayCode,ArrayCode自己的T类型参数,和ArrayCodecompareTo方法也.另外,Comparable<T>在这种if情况下你不需要施法; 这是不必要的.