java为什么我必须强制转换这个泛型类型?
我试图创建一个可比较的节点,并且只保存可比较的对象
从我对Java的理解来看,成员变量value
应该是E
类型,所以稍后当我在compareTo()
中访问它时,它仍然应该是E
类型,不需要强制转换,但编译器告诉我,这与以下情况不同:
incompatible types: java.lang.Comparable cannot be converted to E
我想它应该已经是E
型了。为什么我必须在第一种用法中强制o.value
键入E
,而不是在第二种用法中?我错过了什么
代码如下
public class fakenode<E extends Comparable<E>> implements Comparable<fakenode> {
public E value;
fakenode (E value)
{
this.value = value;
}
@Override
public int compareTo(fakenode o) {
value.compareTo((E)o.value); // Why must I cast o to type E here?
o.value.compareTo(value); // This one works just fine
return -1;
}
# 1 楼答案
您在使用类型
fakenode
的两个地方漏掉了泛型类型参数E
应该是:
不过,我想这不是
compareTo
方法的实际逻辑,因为它总是返回-1