我不知道为什么下面的代码不能工作:无法分配给<T扩展INode>类型变量的INode类型值。为什么?
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将擦除泛型类型,然后仍然需要一个演员?编译器不能为我做这件事吗?
EDIT2:这里是INode
:
public interface INode {
INode accept(Visitor visitor);
INode clone();
}
感谢