Java SE 6中的Properies類有一個名爲setProperty(String key, String value)
的方法,該方法返回Object
。此外,前一個Object
爲該密鑰存儲,或者NULL
存在(如果不存在)。 由於setProperty(String key, String value)
只能取String
作爲值,爲什麼沒有那個方法返回String
?爲什麼Java中的setProperty會返回Object?
8
A
回答
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。
相關問題
- 1. 爲什麼我的POST返回[object Object]
- 2. 爲什麼filter返回[object Object]?
- 3. 爲什麼val()函數返回[object Object]?
- 4. 什麼時候和爲什麼List remove(Object object)返回false
- 5. MySQL查詢返回NodeJS中的[Object,object],爲什麼?
- 6. setProperty()返回false
- 7. 爲什麼`typeof this`返回「object」?
- 8. 爲什麼javascript typeof總是返回「object」
- 9. 爲什麼JavaScript從valueOf()而不是[object]返回[object Object]?
- 10. 在try塊java中返回語句。什麼會被方法返回,爲什麼?
- 11. 爲什麼一個Delphi 2007 ASP.NET AJAX調用返回[object Object]
- 12. 爲什麼$ http.get到Json(new MyComlexObject ...)web api controller返回object Object?
- 13. 爲什麼我返回[Object,object]而不是字符串?
- 14. 爲什麼Object.Equals(new Object(),new Object())返回false
- 15. 爲什麼lodash中的_.pick(object,_.identity)返回空對象?
- 16. EMF中的eGet爲什麼返回Object而不是EObject?
- 17. 爲什麼String.matches在Java中返回false?
- 18. 爲什麼ParameterizableWebPart會作爲ErrorWebPart返回?
- 19. Chrome爲什麼會爲sessionID返回null?
- 20. 爲什麼CreatePointFont()會爲我返回NULL?
- 21. 爲什麼我的ClaimsRequest會返回null?
- 22. 爲什麼在Heroku/Parse中快速返回錯誤「Object not found」?
- 23. .NET中的ActiveX XML DOM SetProperty XmlDocument-Object
- 24. 爲什麼將XML反序列化爲Object返回null值?
- 25. 爲什麼新的Java 8流在toArray調用上返回Object Array?
- 26. 爲什麼javascript的typeof總是返回「object」?
- 27. GruntFile返回[object,Object]
- 28. 爲什麼np.load不會返回由np.save
- 29. JSON - 爲什麼會hasOwnProperty(鍵)返回false
- 30. 爲什麼Regex會返回範圍值?
如果你看看javadoc,你會發現它只是返回你正在設置的值。 –
因爲這是一個嚴重僞裝的HashMap? –
這個steProperty從1.2開始:http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#setProperty(java.lang.String,java.lang.String) – Nivas