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