2010-03-01 197 views
20

Java的Properties對象自從Java 5之前沒有多少變化,它沒有得到泛型支持,或者非常有用的幫助方法(定義模式插入類來處理屬性或幫助加載目錄中的所有屬性文件, 例如)。是否有效棄用Java屬性?

屬性開發停止了嗎?如果是這樣,那麼這種屬性保存/加載的最佳做法是什麼?

或者我完全錯過了什麼?

+0

那麼java.util.Dictionary呢?它已被更新爲使用泛型,但它也被長期記錄爲「過時」。但是,它仍未標記爲@deprecated。我猜貶值是一個難題。 – omerkudat 2010-03-01 20:52:51

+0

@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

回答

10

圍繞屬性的許多概念是絕對古老和可疑的。它具有非常差的國際化程度,它增加了今天只能通過Generic類型完成的方法,它擴展了Hashtable,它本身通常不被使用,因爲它的同步是有限的價值,它的方法與1.2中引入的集合類以及添加到Properties類的許多方法基本上提供了被泛型替代的那種類型安全性。

如果今天實施,它可能是Map<String, String>的特殊實現,並且肯定支持在屬性文件中更好的編碼。

這就是說,沒有真正的替代品不會增加複雜性。確保java.util.prefs.Preferences api是「新的和改進的」,但它增加了一層複雜性,遠遠超出了許多用例所需的範圍。僅僅使用XML也是一個選項(至少可以解決國際化問題),但是一個屬性對象通常可以很好地滿足需求,在這一點上使用它。

+0

對於國際化,您通常會使用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

+2

@BalusC我的猜測是Yishai將屬性文件編碼的怪癖稱爲「窮國際化」,默認情況下ResourceBundle使用相同的編碼。 – 2011-03-27 09:21:39

1

字典結構是大多數編程語言中使用最久的結構之一http://en.wikipedia.org/wiki/Associative_array,我懷疑它會被棄用。

即使要被刪除,核心之外即將有新的實現。

已經有外部擴展,apache commons是我認爲多年來幫助塑造java的很好的資源,請參閱http://commons.apache.org/configuration/howto_properties.html

+1

集合映射接口和實現者似乎是Java關聯數組的正式解決方案 - 恕我直換屬性是更方便的東西 – Brabster 2010-03-01 20:18:46

7

對於簡單的配置要求,它仍然是一個可行的解決方案。它們不需要泛型支持,因爲屬性鍵和值本質上是字符串,也就是說,它們存儲在扁平的ascii文件中。如果您需要取消/封送/序列化對象,則屬性不是正確的方法。對於任何超出中等複雜配置需求的情況,現在首選的方法是java.util.prefs.Preferences

3

它做它需要做的。編寫支持讀取目錄中的所有屬性文件並不難。我會說這不是一個常見的用例,所以我不認爲這是JDK中需要的東西。

此外,它自從Java 5之前發生了輕微變化,因爲Javadoc說擴展了Hashtable<Object, Object>並實現了Map<Object, Object>

+1

有關爲什麼'Hashtable '不是'Hashtable '的解釋,請參閱:http://stackoverflow.com/questions/873510/why-does-java-util-properties -implement-mapobject-object-and-not-mapstring-str – 2010-03-01 20:16:25

+0

感謝鏈接@Tom Hawtin,有趣的閱讀。 – Brabster 2010-03-01 20:20:19

2

「它沒有得到泛型支持」, 爲什麼需要泛型支持;它處理字符串鍵和字符串值 我不會考慮Java屬性棄用。這是一個成熟的圖書館 - 這就是所有

+2

它實際上處理Object鍵和Object值 - 要限制爲String鍵和String值,您需要泛型。 – Brabster 2010-03-01 20:17:03

+0

該類提供了字符串鍵和字符串值方便功能。 – dbrown0708 2010-03-01 20:25:44

+2

@brabster和@ dbrown0708 由於設計不好,基於對象的API會滲透到「屬性」中。 構建它的人被忽略:「贊成組合繼承」 雖然意圖不同(正如在javadoc中所述:「Properties類表示一組持久屬性。屬性可以保存到流或從流加載。鍵和它在屬性列表中的相應值是一個字符串。「) – 2010-03-01 21:00:42

相關問題