我不知道爲什麼下面的代碼不能工作:無法分配給<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();
}
感謝