我正在尝试制作一个可比较的节点,并且仅保存可比较的对象。
据我对Java的了解,成员变量value
的类型应为E
,因此稍后在compareTo()
中访问它时,它的类型仍应为{{1 }},并且不需要强制转换,但是编译器会告诉我,情况并非如此:
E
。
我认为它应该已经是类型incompatible types: java.lang.Comparable cannot be converted to E
。为什么我必须在第一种用法中强制使用E
键入o.value
而不是第二种用法?我想念什么?
代码在下面。
E
答案 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
。