Java SE 6 中的 Properies 类有一个名为 的方法setProperty(String key, String value)
,它返回一个Object
. 此外,先前Object
存储的此密钥,或者NULL
如果不存在。既然setProperty(String key, String value)
只能取 aString
作为值,为什么该方法不返回 a String
?
问问题
5082 次
2 回答
15
不幸的是,类java.util.Properties
被引入 java 1.0,比泛型早很多年。可以存储任何类型的数据的Properties
扩展。Hashtable
因此,您可以执行以下操作:
Properties props = new Properties();
props.put("key", new Object()); // use Hashtable's put method
props.setProperty("key", "value"); // use Proerties' setProperty method
在此示例setProperty
中,必须返回存储在此条目中的先前值,即Object
. 但事实并非如此String
!为避免ClassCastException
JDK 创建者不得不将setProperty()
返回的方法定义为Object
.
顺便说一句,即使是现在类 Properties 实现Map<Object, Object>
而不是Map<String, String>
向后兼容。
于 2012-05-20T17:26:14.243 回答
13
因为 Properties 从一开始就被误解为扩展 Hashtable,它可以存储任何东西。因此,该设计不尊重 Liskov 替换原则:基类可以做的一切,子类必须能够做。
由于 Properties 扩展了 Hashtable,您实际上可以在其中存储任何类型的 Object。
于 2012-05-20T17:21:24.117 回答