2011-03-17 30 views
0

所以,說我有以下枚舉聲明:在一個類的所有實例中是否共享枚舉值?

public class WatchService implements Runnable 
{ 
    private State state; 

    private enum State 
    { 
     FINDING_MANIFEST, FINDING_FILES, SENDING_FILES, WAITING_TO_FINISH 
    }; 
    // other stuff 
} 

現在,假設我有以下的抽象類:

public abstract class MyOtherAbstractClass extends MyAbstractClass 
{ 
    // other stuff 
    private WatchService watchService; 
    // other stuff 
} 

現在,說我有一個擴展上述抽象類下面的類:

public class MyClass extends MyOtherAbstractClass 
{ 
    // other stuff 
} 

如果我有MyClass一些情況下,將他們都有着當前State VA略?例如,如果一個實例聲明state = State.FINDING_MANIFEST;,那麼所有實例的當前狀態是FINDING_MANIFEST

我希望這是有道理的..

回答

4

如果「狀態」是靜態的,那麼是的。否則不。

更改爲:

private static State state; 

這使得state類的所有實例之間共享。

+1

@DLK - 爲什麼默認情況下包含枚舉的變量是靜態的?這與其他變量相同。 – 2011-03-17 14:59:00

+0

我必須第一次錯誤地實現它,因爲我在[this]之後的某個時刻遇到了這個問題(http://weblogs.java.net/blog/2005/01/31/implementing-state-design-pattern-使用-枚舉)。我可能做了一些奇怪的事情,但我想請你們進一步澄清。 – mre 2011-03-17 15:03:51

+1

@DLK:我認爲你混淆了這個實例。枚舉的實例(像SENDING_FILES這樣的常量)是共享的(因爲它們只存在一次),但不包含這些實例的變量。 – f1sh 2011-03-17 15:14:34

1

編號state是一個實例變量。每個實例化對象都有自己的。

如果你將它定義爲

private static State state; 

然後將只有它的一個實例,而該類的所有實例將看到同樣的一個。

1

如果我理解正確的問題,這不是特定於枚舉。 想象一下使用private String state = "FINDING_MANIFEST";的情況。 除非statestatic,它將不會在實例之間共享。

相關問題