2017-07-19 32 views
1

我有一個包含5個Java包的項目。它們都包含具有幻數和硬編碼字符串的類,我期望創建常量。我想知道什麼是最佳做法。我應該爲程序中的所有類都可以導入的所有常量創建一個常量類嗎?或者將常量分成多個較小的文件會更有效率嗎?Java包含的常量

+1

更高效的是什麼?運行速度? – Kayaman

+1

恕我直言,你不應該混合與同一類中的不同關注有關的常量。 –

+0

這些常量或魔術值中的任何一個是否根據代碼所處的環境而改變?例如,一個dev連接字符串vs prod連接字符串? – oooyaya

回答

1

根據最佳實踐,請參閱Principle of Least Privilege

你應該提取內聯硬編碼常量,但你應該而不是把所有的常量放到一個整體類。相反,將常量分成上下文相應的類(「多個較小的文件」),並僅將這些類保留在包級別,以便它們需要被正確引用。

如果該值僅適用於一個特定類別(又名private static final),則不需要將此值提升出課程。如果僅僅在一個地方引用它,它只會創造更多的工作來將它保留在其他地方。

如果該值的行爲像全局變量或需要在許多不同的類中訪問(又名public static final),將相關值提取到單獨的類中是有意義的,但可能是您應該調查的代碼異味。

由於您使用的是軟件包,因此請考慮使用軟件包專用(static final)將您的配置值隔離到需要它的單個軟件包。

考慮使用配置/屬性文件來注入值,而不是在類中顯式硬編碼它們。根據您的需要,您可以使用簡單的Java屬性,或者有許多庫/框架可以幫助您處理屬性,例如Spring