Java Properties是否已被有效弃用?

bra*_*ter 23 java properties deprecated

自Java 5之前Java的Properties对象没有太大变化,它没有Generics支持,或者非常有用的辅助方法(定义模式来插入类来处理属性或帮助加载目录中的所有属性文件,for例).

物业发展停止了吗?如果是这样,目前保存/加载这种属性的最佳实践是什么?

还是我完全错过了什么?

Yis*_*hai 11

关于属性的许多概念肯定是古老而有问题的.它具有非常差的国际化,它增加了今天只能通过Generic类型完成的方法,它扩展了Hashtable,它本身通常是不可用的,因为它的同步价值有限,而且它的方法与它不一致. 1.2中引入的集合类,添加到Properties类的许多方法实质上提供了由泛型替换的类型安全性.

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

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

  • @BalusC我的猜测是,Yishai将属性文件编码的怪癖称为"差的国际化",默认情况下ResourceBundle使用相同的编码. (2认同)

nic*_*bot 7

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