2012-05-31 28 views
0

請遵循代碼塊。映射類型爲Object的值的演員異常問題

Map<String, Object> personDetailMap = new HashMap<String, Object>(); 
personDetailMap.put("name", "isuru"); 
personDetailMap.put("is-male", true); 
(String)personDetailMap.get("is-male"); 

最後陳述導致異常:ClassCastException異常不能施放布爾到字符串 也注意到,值我試圖讀取被置爲基本布爾型的

我的問題是personDetailMap將返回的對象Class對象,那麼爲什麼它給布爾的轉換異常爲String。

+0

你到底想達到什麼目的? – JMelnik

+1

這樣的「異構」地圖,即使你可以使它們在技術上工作,通常被認爲是你最好避免的代碼氣味。 –

回答

3

personDetailMap.put("is-male", true);通過將基元boolean裝箱成對象來存儲BooleanpersonDetailMap.get("is-male");返回相同的Boolean

然後您嘗試將Boolean轉換爲String,但這兩個類沒有任何關係。演員陣容失敗,你會得到這個例外。

聲明(String) anObject;只能在anObject一個字符串(字符串是final,沒有任何子類)時才能工作。

如果你真的想布爾轉換爲字符串,可以使用下面的方法:

+0

或者你可以使用String boolStr = personDetailMap.get(「is-male」)+「」; – user1697575