2013-03-07 59 views
-1

我在回家的路上Java的枚舉:封裝和運行時的初始化

一個有趣的問題,我有一個枚舉

public enum Gender{ 

    Yes(Constants.male()), female(Constants.female()); 

    private final String value; 

    private Gender(String option){ 
      value = option; 
    } 
} 

..我應該封裝值或只是把它聲明爲public?

是否存在運行時初始化該值的缺點?

+1

哈!性別。是 - >男性。 – 2013-03-07 12:34:44

+2

'是'和'女'?構造函數被命名爲'Option'而不是'Gender'? – Jesper 2013-03-07 12:37:04

+0

對不起應該是gender = x – seesee 2013-03-07 12:39:00

回答

1

在你的情況下應該沒有太大的區別,String類是不可變的。不過建議使用封裝是一種很好的做法。

至於「run-time」init,我不確定你的意思。枚舉的本質是單身,所以這是在類加載時被引用的。這是在運行時,是的,但沒有缺點;尤其是如果你不想硬編碼的話。

編輯

由於@GyroGearless指出該領域應被聲明爲final,這是即使它不是public,因爲它是在構造函數中的常數集最佳實踐。哈哈!

+2

唉,String將是不可變的,但不是值字段!如果公開,應該宣佈爲「最終公開」!我還希望使用getter封裝字段,以便與廣泛接受的最佳實踐更加一致。 – 2013-03-07 12:46:45

+1

好點 - 如果是「公開」的話肯定應該是「final」。 – 2013-03-07 12:48:09