Java的Properties對象自從Java 5之前沒有多少變化,它沒有得到泛型支持,或者非常有用的幫助方法(定義模式插入類來處理屬性或幫助加載目錄中的所有屬性文件, 例如)。是否有效棄用Java屬性?
屬性開發停止了嗎?如果是這樣,那麼這種屬性保存/加載的最佳做法是什麼?
或者我完全錯過了什麼?
Java的Properties對象自從Java 5之前沒有多少變化,它沒有得到泛型支持,或者非常有用的幫助方法(定義模式插入類來處理屬性或幫助加載目錄中的所有屬性文件, 例如)。是否有效棄用Java屬性?
屬性開發停止了嗎?如果是這樣,那麼這種屬性保存/加載的最佳做法是什麼?
或者我完全錯過了什麼?
圍繞屬性的許多概念是絕對古老和可疑的。它具有非常差的國際化程度,它增加了今天只能通過Generic類型完成的方法,它擴展了Hashtable,它本身通常不被使用,因爲它的同步是有限的價值,它的方法與1.2中引入的集合類以及添加到Properties類的許多方法基本上提供了被泛型替代的那種類型安全性。
如果今天實施,它可能是Map<String, String>
的特殊實現,並且肯定支持在屬性文件中更好的編碼。
這就是說,沒有真正的替代品不會增加複雜性。確保java.util.prefs.Preferences api是「新的和改進的」,但它增加了一層複雜性,遠遠超出了許多用例所需的範圍。僅僅使用XML也是一個選項(至少可以解決國際化問題),但是一個屬性對象通常可以很好地滿足需求,在這一點上使用它。
對於國際化,您通常會使用ResourceBundle API。檢查http://java.sun.com/developer/technicalArticles/javase/i18n_enhance/和http://bordet.blogspot.com/2007/01/utf-8-handling-for-resourcebundle-and.html – BalusC 2010-03-02 01:48:15
@BalusC我的猜測是Yishai將屬性文件編碼的怪癖稱爲「窮國際化」,默認情況下ResourceBundle使用相同的編碼。 – 2011-03-27 09:21:39
字典結構是大多數編程語言中使用最久的結構之一http://en.wikipedia.org/wiki/Associative_array,我懷疑它會被棄用。
即使要被刪除,核心之外即將有新的實現。
已經有外部擴展,apache commons是我認爲多年來幫助塑造java的很好的資源,請參閱http://commons.apache.org/configuration/howto_properties.html。
集合映射接口和實現者似乎是Java關聯數組的正式解決方案 - 恕我直換屬性是更方便的東西 – Brabster 2010-03-01 20:18:46
對於簡單的配置要求,它仍然是一個可行的解決方案。它們不需要泛型支持,因爲屬性鍵和值本質上是字符串,也就是說,它們存儲在扁平的ascii文件中。如果您需要取消/封送/序列化對象,則屬性不是正確的方法。對於任何超出中等複雜配置需求的情況,現在首選的方法是java.util.prefs.Preferences。
「它沒有得到泛型支持」, 爲什麼需要泛型支持;它處理字符串鍵和字符串值 我不會考慮Java屬性棄用。這是一個成熟的圖書館 - 這就是所有
它實際上處理Object鍵和Object值 - 要限制爲String鍵和String值,您需要泛型。 – Brabster 2010-03-01 20:17:03
該類提供了字符串鍵和字符串值方便功能。 – dbrown0708 2010-03-01 20:25:44
@brabster和@ dbrown0708 由於設計不好,基於對象的API會滲透到「屬性」中。 構建它的人被忽略:「贊成組合繼承」 雖然意圖不同(正如在javadoc中所述:「Properties類表示一組持久屬性。屬性可以保存到流或從流加載。鍵和它在屬性列表中的相應值是一個字符串。「) – 2010-03-01 21:00:42
那麼java.util.Dictionary呢?它已被更新爲使用泛型,但它也被長期記錄爲「過時」。但是,它仍未標記爲@deprecated。我猜貶值是一個難題。 – omerkudat 2010-03-01 20:52:51
@omerkudat,字典基本上是一個1.2之前的集合之前的地圖。雖然沒有正式棄用,但與Vector處於同一組中。這通常不是優選的。 http://stackoverflow.com/questions/1386275/why-java-vector-class-is-considered-obsolete-or-deprecated/ – Yishai 2010-03-01 23:16:13