2012-01-14 76 views
3

說到在名稱 - 值對中聲明預定義的常量,我一直在'java.util.Properties','枚舉'或單獨的類與'公共靜態最終'值。屬性或枚舉或靜態最終

爲了將來的參考,我需要一些關於採取哪種方法的指導。

謝謝!

+0

我個人有一個具有公共靜態最終值的類文件。我覺得這很容易,我知道去哪裏看。如果你開始把枚舉或任何東西放在特定的類中,現在你必須記住它所在的類。就性能而言,我不知道。我相信別人能夠回答這個問題。 – 2012-01-14 19:24:24

回答

4

這一切都取決於你的恆定生命週期。 根據定義,常數是不動的。選擇正確的方法將是可能發生變化和重新包裝需求的問題。

  • 如果你確定,它不會永遠移動:static final是要走的路。 Pi,數學常數,這樣的事情就是一個很好的例子。

  • 如果您認爲存在潛在的變化,但需要簡化代碼操作並且不擔心上升的兼容性,那麼枚舉就可以。我前段時間是爲錯誤代碼做的。

  • 如果您認爲有潛在的變化,但您不希望此更改影響您的代碼,則屬性(使用資源包)是更好的選擇。標籤(翻譯),初始設置等也是一個很好的例子。

+0

請在枚舉用例中加入一些詳細信息... – SlowAndSteady 2012-01-14 19:38:55

+1

@Raj將枚舉用於常量集,例如在紙牌遊戲中你有黑桃,俱樂部,紅心\t和鑽石。另一種情況可以支持文件類型PNG,GIF等,如果您添加更高版本的BMP,則不會有缺點,因爲那樣您將擁有包含與新實現相匹配的枚舉的另一個API版本。 – stacker 2012-01-14 19:52:59

+0

非常全面的答案。 +1。 Raj:你還應該注意@Sean Reilly對我的回答的評論。 – 2012-01-14 19:55:23

2

static final字段用於不能形成一組確定的關閉選項,您可以從中選擇變量的狀態。相反,如果可以的話,你總是使用枚舉。

現在,當您想要保存鍵值字典時,無論其屬性如何,都可以使用屬性類型對象或有時使用Map。

+5

如果您需要鍵值對,並且鍵是關閉選項集,那麼請考慮使用java.util.EnumMap – 2012-01-14 19:36:00

+0

來組合枚舉和地圖方法。此外,請注意,如果您使用常量而非具有特定領域含義的封閉集合中的*真*值,則static final是更好的方法。另外,如果你只在你自己的類中使用常量,考慮將'public'修飾符改爲'private'。 – 2012-01-14 19:38:25

0

還有一件事要考慮 - 這些字符串會在不同的版本中改變嗎?即可能有法文版本,中文版本,「高級」版本?如果是這樣,Properties/ResourceBundles等是要走的路。

0

當您的一組常量固定並且預計不會經常更改時使用枚舉。如果它經常發生變化,那麼很難保持與以前版本的向後兼容性。如果在客戶端服務器體系結構中都有一些Enum的不同版本。 E.g

服務器:public enum Priority{ HIGH,LOW,MEDIUM,AVERAGE}

客戶:public enum Priority{ HIGH,LOW,MEDIUM}

如果讓服務器發送Priority.AVERAGE到客戶端,然後客戶端會拋出異常的說。