gpt4 book ai didi

java - 为什么我必须强制转换这个泛型类型?

转载 作者:行者123 更新时间:2023-12-01 17:45:38 24 4
gpt4 key购买 nike

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

根据我对Java的理解,成员变量value应该是E类型,所以稍后当我在compareTo()中访问它时>,它仍然应该是 E 类型,并且不需要转换,但编译器告诉我情况并非如此:

不兼容的类型:java.lang.Comparable 无法转换为 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;
}

最佳答案

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

应该是:

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

关于java - 为什么我必须强制转换这个泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55672299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com