Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java中的setProperty返回对象?_Java - Fatal编程技术网

为什么Java中的setProperty返回对象?

为什么Java中的setProperty返回对象?,java,Java,JavaSE6中的Properties类有一个名为setProperty(字符串键,字符串值)的方法,它返回一个对象。此外,为该键存储的上一个对象,如果不存在则为NULL。 既然setProperty(字符串键,字符串值)只能将字符串作为值,为什么该方法不返回字符串呢?因为从一开始扩展哈希表就误解了属性,哈希表可以存储任何内容。因此,设计不尊重Liskov替换原则:基类能做的一切,子类都必须能做 由于属性扩展了哈希表,实际上您可以在其中存储任何类型的对象。不幸的是,类java.util.Prop

JavaSE6中的Properties类有一个名为
setProperty(字符串键,字符串值)
的方法,它返回一个
对象
。此外,为该键存储的上一个
对象
,如果不存在则为
NULL

既然
setProperty(字符串键,字符串值)
只能将
字符串作为值,为什么该方法不返回
字符串呢?

因为从一开始扩展哈希表就误解了属性,哈希表可以存储任何内容。因此,设计不尊重Liskov替换原则:基类能做的一切,子类都必须能做


由于属性扩展了哈希表,实际上您可以在其中存储任何类型的对象。

不幸的是,类
java.util.Properties
在泛型之前很多年就被引入java 1.0<代码>属性
扩展了可存储任何类型数据的哈希表
。因此,您可以执行以下操作:

Properties props = new Properties();
props.put("key", new Object());  // use Hashtable's put method
props.setProperty("key", "value"); // use Proerties' setProperty method
在本例中,
setProperty
必须返回存储在此条目中的上一个值,即
Object
。但它不是
字符串
!为了避免
ClassCastException
,JDK创建者必须将
setProperty()
定义为返回
Object
的方法


顺便说一句,为了向后兼容,类属性现在实现了
Map
而不是
Map

如果您查看javadoc,您会发现它只返回您正在设置的值。因为它是一个伪装得很糟糕的HashMap?此StepProperty从1.2开始出现:,java.lang.String)@JuanAlbertoLópezCavallotti-My Javadoc说它返回HashTable.put()的结果,该结果将是以前的值,如果没有,则返回null。