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