我想知道为什么以下代码无法工作:
public static <T extends INode> List<T> cloneList(List<T> list) {
List<T> result = new ArrayList<T>(list.size());
for (T t : list)
result.add(t.clone()); <--- problem here
return result;
}
INode.clone()
具有 INode
返回类型,并且我们知道每个 T 都必须实现 INode
,所以我很惊讶上面的代码无法编译。我上面显示的内容是否存在语义问题?
编辑:也许是因为在编译时 Java 会删除泛型类型,然后仍然需要强制转换?编译器不能为我做这件事吗?
编辑2:这是INode
:
public interface INode {
INode accept(Visitor visitor);
INode clone();
}
谢谢
最佳答案
T 是一个 INode,但 INode 不是 T。 所以你不能将 INode.clone() (Object 或 Inode) 的结果放入 T 的列表中。 这就是为什么你需要 Actor 阵容
问候
关于java - 无法将 INode 类型值分配给 <T extends INode> 类型变量。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9377225/