自Java 5之前以来,Java的Properties对象并没有发生很大的改变,并且它没有泛型支持或非常有用的辅助方法(例如定义插入类以处理属性或帮助加载目录中的所有属性文件的模式)。
开发Properties已经停止了吗?如果是这样,那么当前的最佳实践是什么,可以用于保存/加载此类属性?
还是我完全错过了些什么?
自Java 5之前以来,Java的Properties对象并没有发生很大的改变,并且它没有泛型支持或非常有用的辅助方法(例如定义插入类以处理属性或帮助加载目录中的所有属性文件的模式)。
开发Properties已经停止了吗?如果是这样,那么当前的最佳实践是什么,可以用于保存/加载此类属性?
还是我完全错过了些什么?
在属性(Properties)方面的许多概念都是古老而有问题的。它的国际化非常差,添加方法今天通过泛型类型就可以轻松实现,它扩展了Hashtable,后者通常不再使用,因为其同步功能有限,并且它的方法与1.2引入的集合类不协调。Properties类添加的许多方法本质上提供的是一种类型安全性,这种类型安全性已由泛型所取代。
如果今天实施,它可能会成为Map<String, String>
的特殊实现,并且肯定会支持更好的属性文件编码。
话虽如此,还没有一个替代品不会增加复杂性。当然,java.util.prefs.Preferences api是“新的和改进”的,但它增加了远远超出许多用例需求的复杂度层次。使用XML也是一种选择(至少解决了国际化问题),但属性对象通常完全满足需求,那么就可以使用它。
对于简单的配置需求,它仍然是可行的解决方案。因为属性键和值本质上是字符串,存储在扁平的ASCII文件中,所以它们不需要泛型支持。如果您需要对象的反/序列化,Properties不是正确的方法。现在更喜欢使用java.util.prefs.Preferences方法,用于任何超出中等复杂配置需求的情况。
Hashtable<Object,Object>
并实现了Map<Object,Object>
。Hashtable<Object,Object>
而不是Hashtable<String,String>
请参见:https://dev59.com/i3NA5IYBdhLWcg3wrPyq - Tom Hawtin - tackline"它没有泛型支持," 为什么需要泛型支持; 它处理字符串键和字符串值。我不认为Java属性已过时。它是一个成熟的库 - 就这样。
字典结构是大多数编程语言中最古老、最常用的结构之一http://en.wikipedia.org/wiki/Associative_array,我怀疑它会被弃用。
即使它被移除了,核心外也很快会有新的实现。
已经有外部扩展了,Apache Commons 是一个很好的资源,我认为这些年来已经帮助塑造了 Java,参见http://commons.apache.org/configuration/howto_properties.html。