簡體   English   中英

擴展自己作為成員的類

[英]Extends class that has itself as a member

假設我必須使用一個具有實現二叉樹的類的庫,其簽名如下:

class Node {
    public void setN0(Node n);
    public void setN1(Node n);
    public Node getN0();
    public Node getN1();
}

因此,我想創建一個擴展該類的類,以便在其上放置一個圖形層,例如

class UINode extends Node {
    private int coordinateX;
    private int coordinateY;
}

但是我不能這樣做,因為不可能將UInode傳遞為Node的子節點,例如

UINode root = new UINode();
UINode n0 = new UINode();
UINode n1 = new UINode();
root.setN0(n0);  //Not possible
root.setN1(n1);  //Not possible

是否有設計模式或某種方法來應對這種情況? 還是有一個我看不到的簡單解決方案?

實際上,可以將UINode設置為Node子級:

UINode root = new UINode();
UINode n0 = new UINode();
root.setN0(n0);  // possible

但是,如果要從root對象獲取它,則必須強制轉換它:

UINode n = (UINode) root.getN0();

除此之外:如果您想自己實現它(假設它不在庫中),則可以創建一個通用Node類:

class Node<T extends Node> {
    public void setN0(T n);
    public void setN1(T n);
    public T getN0();
    public T getN1();
}

現在,您可以在UINode擴展此類:

class UINode extends Node<UINode> {
    // ...
}

並在沒有強制轉換的情況下使用它:

UINode root = new UINode();
root.setN0(new UINode());

UINode n = root.getN0();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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