2016-12-24 48 views
2

有些人使用Enum而不是類來創建對象並將其注入代碼。 E.g使用POJO控制和依賴注入的反轉

public enum EnumSample { 
    INSTANCE; 
    private String name = "Sample Enum"; 
    private String version = "1"; 
    public String getName() { 
     return this.name; 
    } 

    public String getVersion() { 
     return this.version; 
    } 
} 

,並在類:

public class MyClass { 
    public static void main(String[] args) { 
     new App(); 
    } 
} 

public class App { 
    private EnumSample enumSample = EnumSample.INSTANCE; 
    public App() { 
     System.out.printf("%s - %s",enumSample.getName(), enumSample.getVersion()); 
    } 
} 

因此,它是正確的嗎?由於Java的甲骨文網站上的文檔中他們說:

從Java documents -

,您應該使用枚舉類型,你需要表示一組固定的常數的任何時間。這包括自然枚舉類型,例如太陽系中的行星,以及在編譯時知道所有可能值的數據集 - 例如菜單上的選項,命令行標誌等等。

我只是想知道這種方式是否正確,是否有更好的模式?請考慮這個版本只是一個例子...

我得知那枚枚舉是爲Singelton的...糾正...我只是想找到其他方式來做這些沒有枚舉,如果有任何請與我分享我...謝謝

回答

1

實際上有兩個主要用例在Java中enum

(1)定義一組固定的常數直接在Java文檔中提到。

(2)enum也可用於安全地(線程)創建一個類的單例實例(即,沒有明確使用synchronize等..)。你可以參考here關於這個問題。

在你EnumSample時,實際上是創建一個且僅一個所述EnumSample可以與可變INSTANCE(上面用例2)被稱爲對象。

我知道Enum對於Singelton來說是正確的。我只想找到 其他方法來做這些沒有枚舉。

在Java中,有幾種方法來創建一個線程安全的方式單個實例,其中的一個如下所示的使用staticfinalINSTANCEprivate構造:

public class Sample { 

    //Create a static final object  
    private static final Sample INSTANCE = new Sample(); 

    //private constructor, so this class can't instantiated from outside 
    private Sample() { 
    } 

    //Use the getInstance() static method which returns same instance always 
    public static Sample getInstance() { 
     return INSTANCE; 
    } 

    private String name = "Sample Enum"; 
    private String version = "1"; 
    public String getName() { 
     return this.name; 
    } 

    public String getVersion() { 
     return this.version; 
    } 
} 

public class App { 

    public App() { 
     System.out.printf("%s - %s",Sample.getInstance().getName(), 
      Sample.getInstance().getVersion()); 
    } 
} 

你可以請參閱here以獲取安全創建單例的其他方法。

+0

所以這是正確的...好吧,這是好的...還有更好的方法嗎? –

+0

你的意思是任何更好的方法,使用或不使用枚舉? – developer

+0

我的意思是沒有枚舉 –

相關問題