无法为类型变量分配INode类型值。 为什么?

我想知道为什么以下代码无法工作:

public static  List cloneList(List list) { List result = new ArrayList(list.size()); for (T t : list) result.add(t.clone()); <--- problem here return result; } 

INode.clone()INode返回类型,我们知道每个T都必须实现INode ,所以我很惊讶上面的代码没有编译。 我上面展示的是什么语义问题?

编辑:也许是因为在编译时Java将擦除generics类型,然后仍需要强制转换? 编译器难道不能为我做到这一点吗?

EDIT2:这是INode

 public interface INode { INode accept(Visitor visitor); INode clone(); } 

谢谢

T是一个INode,但是INode不是T.所以你不能将INode.clone()(Object或Inode)的结果放入T的列表中。这就是你需要一个强制转换的原因

问候

首先,我怀疑你没有在INode类中重新声明clone方法并实现了Cloneable接口。

此外,为了将克隆插入参数化列表,需要转换为T

首先,我认为INode是一个接口,因此clone()方法不应该直接可用,因为它是在Object中定义的。 您应该在接口中定义clone()方法,或者使INode扩展Cloneable,然后将克隆的节点转换为T.

此外,您在编写时,需要将克隆对象转换为T,因为您知道T和克隆都是INode的实例,但您不确定克隆是否是T的实例。