2014-04-05 111 views
0

考慮以下內部類:聲明的類的枚舉類內部作爲靜態成員

private static class Node<E> { 
    public E value; 
    public Node<E> next; 
    public Node<E> previous; 

    public Node(final E value) { 
     this.value = value; 
    } 

    public boolean hasNext() { 
     return (next != null); 
    } 

    public boolean hasPrevious() { 
     return (previous != null); 
    } 

    @Override 
    public String toString() { 
     return "(" + value + ")"; 
    } 
} 

是否有一個(直觀的)的方式來聲明一個FAKE_HEADFAKE_TAIL變量?

我知道我可以添加以下的類中:

public static Node<E> FAKE_HEAD = new Node<>(null); 
public static Node<E> FAKE_TAIL = new Node<>(null); 

不過,現在我附上狀態,不應該有狀態,這我關注了一下有一個成員變量。

實際上,當我得到一個Node<E> node並且想要檢查它是否是假冒的頭部時,我會打電話給if (node == FAKE_HEAD)

我想它是一個枚舉,如:

public static enum Node<E> { 
    FAKE_HEAD, 
    FAKE_TAIL 
} 

然而,枚舉也應該是Node<E>,因爲我希望能夠引用FAKE_HEADNode<E>

我該如何實現這樣的設計?將創建一個Node<E>接口和class ImplementedNode<E> implements Node<E>(更好的名字想要)類和enum EnumNode<E> implements Node<E>工作?

+0

我只是使用靜態字段,但使他們最終。我認爲枚舉方法會使它過於複雜。例如,如果您引入了一個接口,那麼您可能需要在其中聲明節點行爲,然後枚舉將必須實現這些行爲。 –

回答

0

會創建一個Node接口並擁有一個類ImplementedNode實現Node(需要更好的名稱)類和枚舉EnumNode實現Node的工作?

是的,那就是我會做的。我會將它們命名爲interface INodeclass Nodeenum ENode