Java常量文件
回答
它被認爲在Java中不好的做法,大多數面嚮對象語言,簡單地定義一個類來保存常量。定義它們關聯的類中的常量要好得多。通常有一個。例如
interface MyComponent {
/** The default height for a component */
public static final int DEFAULT_HEIGHT = 5;
// other stuff
}
如果真的沒有人可以自由地定義一個單獨的類。
編輯:這裏的關鍵事情是:
- 讓常量容易找到。如果有「自然」放置它們的地方,將它們放在那裏(即Component對象的默認高度屬於Component類)。
- 不要有比你需要更高的耦合。將所有常量放在一個'常量'類中可以實現高耦合,特別是隨後的修飾符傾向於將所有常量放入常量類中,而不管是否有另一個類可以自然放入。
- 僅因爲常量被多個類使用,並不意味着它應該在'常量'類中。如果「應用程序」和使用應用程序類的類使用常量,則將其放入應用程序類中。這樣你就不會增加耦合。
通常情況下,你會使用一個常量類,或者在它們用於類定義它們,一拉:
class Constants {
public static final int NUM_TRIANGLES = 4;
public static final String SOME_TEXT = "This is a constant";
}
然後,你指的他們是:
String inst = Constants.SOME_TEXT;
我知道你剛纔展示的例子,但我想強調一個不應該使用CONST_作爲常量的前綴。 ALL_CAPS是指示常量的標準方式。 – 2010-10-05 17:41:46
你也可以把它變成一個接口而不是一個類。 – 2010-10-05 17:42:22
對,這只是一個例子,如果他來自C/C++(這是我的問題),可能讓人想起提問者的背景。 – billjamesdev 2010-10-05 17:44:02
訪問枚舉是相當慢的操作,與局部變量或「靜態最終」(據我所知是由java編譯器內聯編譯)相比。當涉及內存/空間使用情況時,枚舉器的開銷也相當高。請參閱http://developer.android.com/guide/practices/design/performance.html#avoid_enums – Tseng 2010-10-05 19:23:18
最常用的方法是在類創建「constants」是你需要他們:
class Example {
private static final int FILENAME = "test.txt;
}
而不是私人也可以宣佈default,保護或公開。儘管定義常量被認爲是OO anti pattern是一個特殊的「常量」(God)類,它存儲了整個應用程序的常量。或者,您也可以將配置數據存儲在Java properties file中,這不被視爲反模式。
另一種快速普及的選擇是使用Dependency Inject(DI)模式。這個模式通常用於依賴對象,但它也可以用於將常量值注入到對象中。例如,這可以與谷歌的輕量級Guice DI框架來實現:
class Example {
String filename;
@Inject
public Example(@ConfigFilename String filename) {
this.filename = filename;
}
在一個特殊的Binder類,你會綁定一個值與@ConfigFilename註釋的字符串。這樣,您可以進行獨立測試的最小耦合和類。
如果我在Android上使用屬性文件。我可以放在哪裏? – VansFannel 2010-10-06 06:09:17
有幾種方法,例如從類路徑(具有類的目錄)中讀取屬性文件:http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html – Kdeveloper 2010-10-06 17:57:16
Dagger也很酷https://github.com/square/dagger – Caipivara 2015-01-27 16:29:59
- 1. 在文件中讀入常量#java
- 2. Swift常量文件?
- 3. 字符串文字與java中的常量文件
- 4. Java文件IO異常
- 5. Java文件通道異常
- 6. 元框架/常量文件?
- 7. Java中的大量常量
- 8. 類的常量和文件導入爲java
- 9. 從常量java文件注入spring bean中的值
- 10. 從JNI(Java Native Interface)訪問C常量(頭文件)
- 11. 什麼是使用錯誤在Java中的常量文件?
- 12. Java執行批量文件
- 13. 從常量類文件中訪問常量
- 14. Java圖標常量 - 靜態常量是否正常?
- 15. 的Java 8常量池常數依賴
- 16. JSP中的Java常量
- 17. 常量輪詢或Java RMI?
- 18. Java - 常量類設計
- 19. Java可擴展常量
- 20. Java包含的常量
- 21. Java中的字母常量?
- 22. 在Java中重寫常量
- 23. 未找到Java文件異常錯誤
- 24. Java-空指針異常,文件輸入?
- 25. Java重定向異常到文件
- 26. FileNotFoundException異常的java文件的Android
- 27. 文件未發現異常 - Java的
- 28. 變量等於Java中的常量
- 29. JS文件裏面的PHP常量
- 30. 休眠映射文件中的常量
有趣的是,我剛剛讀到變量和常量不應該在代碼可讀性的界面內。我同意這一點,因爲我認爲好的命名和'Constants'類更好,因爲大多數常量將用於不同的類。如果您使用常量來「配置」應用程序,那麼也可以在一個地方使用任何東西 – WarrenFaith 2010-10-05 19:59:19
變量不能位於界面中。我相信,如果它們與實現接口的所有類相關,常量應該是。如果你的常量被所有的類使用,那麼是的,把它們放在一個常量類中(如上所述)。如果它們用於配置應用程序,那麼它們可能屬於Application類。他們關鍵的問題是讓他們很容易找到,而不是與任何階層有很高的聯繫。如果不小心處理,Constants類往往會非常耦合。 – DJClayworth 2010-10-05 20:41:14