2016-05-11 3 views
3

の種類を決定:は、オブジェクト

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は、ノードの両方のタイプなので、私は私がクラスの両方に実装されるインタフェースで書くことができる機能を実装し、する必要が知っていますリストの最後にヒットした時点を把握することができます。

+0

'instanceof'はあなたが探しているものです – SomeJavaGuy

+0

ええ、私はそれを見ましたが、その周りには何か方法がありますか? – halapgos1

+0

あなたはどちらかを使用する必要があります.equals()または.instanceof()、==はJavaのハッシュコードを比較します – Gala

答えて

7

ここでインスタンスを使用しています。つまり、ノードインタフェースに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 { 
     ... 
    } 
} 

別の解決策は、Nodesize()機能を実装することです:ifステートメントaltogotherを取り除く

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(); 
    } 
} 

+0

あなたは本当のMVPです! – halapgos1

関連する問題