26

Java 的Properties对象自 Java 5 之前的版本以来没有太大变化,它没有泛型支持,也没有非常有用的辅助方法(定义的模式来插入类以处理属性或帮助加载目录中的所有属性文件,例如例子)。

房地产开发停止了吗?如果是这样,这种属性保存/加载的当前最佳实践是什么?

还是我完全错过了什么?

4

5 回答 5

11

很多关于属性的概念绝对是古老且值得怀疑的。它的国际化很差,它添加了今天只能通过 Generic 类型完成的方法,它扩展了 Hashtable,它本身通常不可用,因为它的同步价值有限,而且它的方法与1.2 中引入的集合类,以及添加到 Properties 类的许多方法本质上提供了由泛型取代的类型安全。

如果今天实现,它可能是 a 的特殊实现Map<String, String>,并且肯定会在属性文件中支持更好的编码。

话虽这么说,没有真正的替代品不会增加复杂性。当然 java.util.prefs.Preferences api 是“新的和改进的”,但它增加了一层复杂性,远远超出了许多用例所需的复杂性。仅使用 XML 也是一种选择(至少可以解决国际化问题),但属性对象通常可以很好地满足需求,此时使用它。

于 2010-03-01T20:15:52.993 回答
7

对于简单的配置要求,它仍然是一个可行的解决方案。它们不需要泛型支持,因为属性键和值本质上是字符串,也就是说,它们存储在平面的 ascii 文件中。如果您需要取消/编组/序列化对象,属性不是正确的方法。现在首选的方法是java.util.prefs.Preferences用于任何超出中等复杂配置需求的方法。

于 2010-03-01T20:09:13.920 回答
3

它做它需要做的事情。编写对读取目录中所有属性文件的支持并不难。我会说这不是一个常见的用例,所以我不认为这是需要在 JDK 中的东西。

此外,自 Java 5 之前的版本以来,它略有变化,正如Javadoc所说,扩展Hashtable<Object, Object>和实现Map<Object, Object>.

于 2010-03-01T20:10:11.857 回答
3

“它没有泛型支持”,为什么需要泛型支持;它处理字符串键和字符串值,我不会认为 Java 属性已弃用。这是一个成熟的图书馆——仅此而已

于 2010-03-01T20:13:33.493 回答
1

字典结构是大多数编程语言中最古老的最常用结构之一http://en.wikipedia.org/wiki/Associative_array,我怀疑它会被弃用。

即使要被删除,很快也会有新的实现在核心之外。

已经有外部扩展,apache commons 是我认为多年来帮助塑造 java 的重要资源,请参阅http://commons.apache.org/configuration/howto_properties.html

于 2010-03-01T20:07:24.287 回答