为什么必须强制转换此泛型类型?

时间:2019-04-14 05:42:34

标签: java generics

我正在尝试制作一个可比较的节点,并且仅保存可比较的对象。

据我对Java的了解,成员变量value的类型应为E,因此稍后在compareTo()中访问它时,它的类型仍应为{{1 }},并且不需要强制转换,但是编译器会告诉我,情况并非如此:

E

我认为它应该已经是类型incompatible types: java.lang.Comparable cannot be converted to E。为什么我必须在第一种用法中强制使用E键入o.value而不是第二种用法?我想念什么?

代码在下面。

E

1 个答案:

答案 0 :(得分:4)

您在使用类型E的两个地方遗漏了通用类型参数fakenode

应该是:

class fakenode<E extends Comparable<E>> implements Comparable<fakenode<E>> { // first change
    public E value;

    fakenode (E value)
    {
        this.value = value;
    }

    @Override
    public int compareTo(fakenode<E> o) { // second change
        value.compareTo(o.value);
        o.value.compareTo(value);

        return -1;
    }
}

我想这不是您的compareTo方法的实际逻辑,因为它总是返回-1