还有另一个Java泛型“;“不兼容类型”;编译错误

还有另一个Java泛型“;“不兼容类型”;编译错误,java,generics,inheritance,Java,Generics,Inheritance,我在编写一些代码时,遇到了一个不兼容类型编译错误。 这就是我所拥有的: public interface Expression<T> { int getArity(); T evaluate(); } 公共接口表达式{ int getArity(); T评估(); } 公共抽象类值实现表达式{ @凌驾 public final int getArity(){return 0;} } 公共最终类常量扩展值{ 私人最终T值; /**类常量对象的参数构造函数*/

我在编写一些代码时,遇到了一个
不兼容类型
编译错误。 这就是我所拥有的:

public interface Expression<T> {
    int getArity();
    T evaluate();
}
公共接口表达式{
int getArity();
T评估();
}

公共抽象类值实现表达式{
@凌驾
public final int getArity(){return 0;}
}

公共最终类常量扩展值{
私人最终T值;
/**类常量对象的参数构造函数*/
公共常数(T val){
值=val;
}
/**复制类常量对象的构造函数*/
私有常量(常量实例){
value=instance.evaluate();//此处出错。
}
@凌驾
public T evaluate(){return value;}
}
我认为我在使用继承时没有正确地声明泛型,所以我检查了它们在其中编写的代码

interface PayloadList<E,P> extends List<E>
接口PayloadList扩展列表
上面的声明使用相同的泛型类型
E
,这就是我想在示例中实现的。这似乎是假设来自
常量的
T
与来自
值的
不同。否则,它应该能够合并两个
T
,并看到它是相同的类型。 我如何才能正确地实现我想要实现的目标


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

您的
实例
变量定义为
常数实例

如果未在变量上指定泛型,则泛型类型将自动为
对象
,并且类型
对象
不同于
t

你必须使用

private Constant(Constant<T> instance)

因为这与
私有常量(常量实例)

相同,我怀疑您想要
私有常量(常量实例){
相反…^^
Constant
!=
Constant
-当你不指定泛型时,它将是
Constant
,我确信它一定是一些小东西逃过了我的眼睛。我试过了,现在它编译了,带有
不安全操作
警告。事实上,现在就解决了。@OliCharlesworth如果如果你想将此作为回答,我将欣然接受。
interface PayloadList<E,P> extends List<E>
private Constant(Constant<T> instance)
private Constant(Constant instance)