gpt4 book ai didi

java - 另一个 Java 泛型 "incompatible types"编译错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:29:50 24 4
gpt4 key购买 nike

我在写一些代码时遇到了 incompatible types编译错误。这是我的:

public interface Expression<T> {
int getArity();
T evaluate();
}

public abstract class Value<T> implements Expression<T> {
@Override
public final int getArity() { return 0; }
}

public final class Constant<T> extends Value<T> {
private final T value;

/** Parameter constructor of objects of class Constant. */
public Constant(T val) {
value = val;
}

/** Copy constructor of objects of class Constant. */
private Constant(Constant instance) {
value = instance.evaluate(); // Error here.
}

@Override
public T evaluate() { return value; }
}

我认为我在使用继承时没有正确声明泛型,所以我检查了 Oracle's tutorial , 他们在其中写道

interface PayloadList<E,P> extends List<E>

上面的声明使用了相同的泛型类型E ,这是我想要在示例中完成的。似乎假设 T来自 Constant<T>与来自 Value<T> 的不同.否则它应该能够合并 T并看到它是同一类型。我怎样才能正确地实现我想要实现的目标?

(即某物的常数是某物的值,是同一事物的表达)

最佳答案

你的 instance变量定义为 Constant instance;

如果您没有在变量上指定泛型,泛型类型将自动为 Object 和类型 Object不同于T .

你必须使用

private Constant(Constant<T> instance)

代替

private Constant(Constant instance)

因为这与 private Constant(Constant<Object> instance) 相同

关于java - 另一个 Java 泛型 "incompatible types"编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761767/

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