Java泛型方法, 运行时错误

4
当我尝试运行以下代码时,编译器生成了以下异常信息:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: JTOGenerics.ArrayCode.countGreaterThan at JTOGenerics.ArrayCode.main(ArrayCode.java:17) Java Result: 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);
    }
}
2个回答

5
您在ArrayCode类中定义了自己的Comparable接口。看起来,泛型static方法countGreaterThan的类型边界正在解析为该Comparable接口。然而,Integer实现了内置的java.lang.Comparable接口。
请删除您自己的Comparable接口,这意味着Comparable将引用内置的Comparable接口。
此外,ArrayCode类本身不需要实现Comparable(除非您的帖子中还有其他非静态代码)。您可以删除ArrayCode上的implements Comparable<T>ArrayCode自己的T类型参数以及ArrayCodecompareTo方法。此外,在if条件中,您不需要将其强制转换为Comparable<T>,这是不必要的。

3

这是因为您创建了自己的接口,称为Comparable

Integer没有实现您的版本。

我建议您删除自己的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接