簡體   English   中英

Java中的通用通配符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM