为什么Java中的setProperty返回Object?

Mec*_*MK1 8 java

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

Ale*_*exR 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
Run Code Online (Sandbox Code Playgroud)

在此示例中,setProperty必须返回存储在此条目中的先前值,即Object.但事实并非如此String!为了避免ClassCastExceptionJDK创建者必须定义setProperty()为返回的方法Object.

BTW甚至现在类属性实现Map<Object, Object>而不是Map<String, String>向后兼容.


JB *_*zet 13

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

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