簡體   English   中英

確定對象的類型

[英]Determining type of object

如果我有這種情況:

interface Node {}

class EmptyNode implements Node {}

class NotEmptyNode implements Node {}

現在我有另一個班,

class List {
  Node n;
}

我正在嘗試做的是找到一種方法來確定獲取節點列表大小的方法。 我已經有了邏輯:

public int getSize(Node start) {
    if (start==EmptyNode) {  //Can't do this, not sure how to check if its an empty Node
        return 0;
    }
    else {
        return 1 + getSize(start.next()); //Want to add 1 and move to next Node
    }
}

由於EmptyNode和NotEmptyNode都是Node的類型,我知道我需要實現一個我可以在接口中編寫的函數,該函數將在兩個類中實現,並且能夠計算列表末尾何時被命中。

你在這里處理實例。 這意味着您可以在節點接口中放置一個isEmpty()方法,並使用它來檢查節點是否為空。

interface Node {
    boolean isEmpty();
}

class EmptyNode implments Node {
    @Override
    public boolean isEmpty() { return true; }
}

class NotEmptyNode implements Node {
    @Override
    public boolean isEmpty() { return false; }
}

...

public int getSize(Node start) {
    if (start.isEmpty()) {
        ...
    }
    else {
        ...
    }
}

另一個解決方案是讓Node實現一個size()函數:

interface Node {
    int size();
    Node next();
}

class EmptyNode implements Node {
    @Overide
    public int size() {
        return 0;
    }
    ...
}

class NotEmptyNode implements Node {
    @Overide
    public int size() {
        return 1 + next().size();
    }
    ...
}

...

class List {
    Node n;

    public int getSize() {
        return n.size();
    }
}

哪個擺脫了if語句altogother。

暫無
暫無

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

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