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

时间:2015-11-11 23:31:51

标签: java

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

线程中的异常" 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);
    }
}

2 个答案:

答案 0 :(得分:5)

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

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

此外,ArrayCode课程本身并不需要实施Comparable(除非您的帖子中没有其他非静态代码);您可以删除implements Comparable<T>上的ArrayCodeArrayCode自己的T类型参数以及ArrayCode&#39; s compareTo方法也。另外,您不需要在Comparable<T>条件下向if投射;这是不必要的。

答案 1 :(得分:3)

这是因为您已经创建了自己的名为Comparable的界面。

Integer未实现您的版本。

我会摆脱你的版本。