【发布时间】:2015-05-21 18:25:49
【问题描述】:
我试图理解为什么 java.util.Properties 以这种方式实现。它有两个接口:getProperty/setProperty 只接受字符串,put/get 接受任何对象作为值。这两个接口看起来是重叠的,所以用 put() 添加的字符串可以使用 getProperty() 来检索。
这个奇怪的混合界面似乎存在一些问题。放置一个覆盖字符串属性的对象具有清除字符串值的副作用,产生 null 作为 getProperty 结果。添加一个整数或其他一些具有简单字符串转换的值,可能会被误解为一个真实的属性值(但作为一个属性,它始终为空)。
我的问题是:这是否有真正的实际原因?还是我怀疑它是一个半生不熟的实现?
【问题讨论】:
-
我无法备份它,但我强烈怀疑问题是向后兼容性。
Properties扩展了Hashtable,这是泛型之前的一个旧类;这意味着如果你有一个Properties,你可以调用properties.put(whatever, whateverElse)。当泛型出现时,Java 人员希望保持代码向后兼容,这意味着让它扩展Hashtable<Object, Object>。 -
Properties是Hashtable的子类,没有覆盖get/put,因此有这种行为。getProperty/setProperty是get/put的类型化版本。这是历史问题,而不是隐藏 get/put。
标签: java