我正在编写一些代码并遇到了一个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 的教程,其中他们写
interface PayloadList<E,P> extends List<E>
上面的声明使用相同的泛型类型E
,这就是我想要在我的示例中完成的任务。似乎假设T
from Constant<T>
与来自的不同Value<T>
。不然应该可以merge both T
并看到它是同一类型。
我怎样才能正确地实现我想要实现的目标?
(即,某事物的常量是某事物的值,它是同一事物的表达)
Your instance
变量定义为Constant instance;
如果您没有在变量上指定泛型,则泛型类型将自动为Object
,以及类型Object
不同于T
.
你必须使用
private Constant(Constant<T> instance)
代替
private Constant(Constant instance)
因为这与private Constant(Constant<Object> instance)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)