为什么Java中的setProperty返回Object?

时间:2012-05-20 17:18:29

标签: java

Java SE 6中的Properies类有一个名为setProperty(String key, String value)的方法,它返回Object。此外,为此密钥存储了先前的Object,如果不存在,则为NULL。 由于setProperty(String key, String value)只能将String作为值,为什么该方法不会返回String

2 个答案:

答案 0 :(得分:14)

不幸的是,类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的方法。

BTW即使现在类属性也实现Map<Object, Object>而不是Map<String, String>以实现向后兼容。

答案 1 :(得分:13)

因为属性从一开始就被误解,扩展了Hashtable,它可以存储任何东西。因此,设计不尊重Liskov替换原则:基类可以做的所有事情,子类必须能够做到。

由于Properties扩展了Hashtable,你实际上可以在其中存储任何类型的Object。