11

Java SE 6 中的 Properies 类有一个名为 的方法setProperty(String key, String value),它返回一个Object. 此外,先前Object存储的此密钥,或者NULL如果不存在。既然setProperty(String key, String value)只能取 aString作为值,为什么该方法不返回 a String

4

2 回答 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!为避免ClassCastExceptionJDK 创建者不得不将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 回答