[英]Generic wildcard in Java
我正在寫一個通用類:
public class Node<T> {
private Node<T> parent = null;
private List<? extends Node<T>> children = null;
public Node<T> getParent() {
return parent;
}
public void setParent(Node<T> parent) {
if(this.parent != null){
// Remove current parent's children references
this.parent.getChildren().remove(this);
}
// Add references
this.parent = parent;
parent.getChildren().add(this);
}
public List<? extends Node<T>> getChildren() {
return children;
}
}
我想要其他一些子類來繼承該Node。 不能編譯該代碼,並且在parent.getChildren().add(this);
行上出現錯誤parent.getChildren().add(this);
。 因為我用List<? extends Node<T>>
聲明了getChildren() List<? extends Node<T>>
List<? extends Node<T>>
為返回類型,而'this'是Node<T>
類型。
反正有解決辦法嗎?
將清單聲明為:
List<Node<T>> children
您仍然可以將子類的實例放在列表中。
如果將其保留為未知類型,則編譯器無法確保將其鍵入為哪個類。 例如,它可能被鍵入為SubClassA,但是您要添加SubClassB,並且它無法根據聲明的類型知道,這是編譯器必須進行的所有操作。 在運行時,雖然列表和子級的類型可能匹配,但編譯器無法斷言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.