2012-05-20 19 views
8

Java SE 6中的Properies類有一個名爲setProperty(String key, String value)的方法,該方法返回Object。此外,前一個Object爲該密鑰存儲,或者NULL存在(如果不存在)。 由於setProperty(String key, String value)只能取String作爲值,爲什麼沒有那個方法返回String爲什麼Java中的setProperty會返回Object?

+1

如果你看看javadoc,你會發現它只是返回你正在設置的值。 –

+1

因爲這是一個嚴重僞裝的HashMap? –

+0

這個steProperty從1.2開始:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#setProperty(java.lang.String,java.lang.String) – Nivas

回答

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的方法。

順便說一句,即使現在類的屬性實現Map<Object, Object>而不是Map<String, String>向後兼容性。

13

因爲Properties從一開始就通過擴展Hashtable(可以存儲任何內容)而被誤解。因此,設計並不尊重Liskov替代原則:基類可以做的所有事情,子類必須能夠做到。

由於Properties擴展了Hashtable,事實上可以存儲任何類型的Object。

相關問題