2013-08-20 31 views
2

我的代碼:無法施展對象的HashMap

Object res = stub.call(sessionId, "sale.list", "11111"); 
HashMap<String, String> map = (HashMap<String, String>) res; 

轉換對象轉換成HashMap中我得到了下面的異常,

Exception in thread "main" java.lang.ClassCastException: [Ljava.util.HashMap; 
cannot be cast to java.util.HashMap 

誰能幫我如何檢索對象的數據嗎?

回答

5

只有當stub.call(sessionId, "sale.list", "11111")返回HashMap對象時,纔可以投射res到HashMap

[Ljava.lang.HashMap;表明你得到的是一個hashMap數組,而不是一個HashMap。

1
Object res = stub.call(sessionId, "sale.list", "11111"); 

現在,如果你知道上面的代碼返回的java.util.Map或至少一個的java.util.HashMap,並遵循相同的仿製藥,那麼你可以將它轉換爲一個地圖。或者至少,它應該返回一個null。

Map<String, String> map = (Map<String, String>) res; 
4

你得到哈希映射的數組,所以轉換爲數組:

HashMap[] maps = (HashMap[]) res; 
+0

你救了我的一天。 –

0

如果你想投一些事一些其他的東西,你可能知道關於Java鑄造。在Java中,有兩種類型的引用變量轉換。

向下註釋:如果您有一個引用子類型對象的引用變量,則可以將其分配給子類型的引用變量。您必須進行明確的轉換才能完成此操作,其結果是您可以使用此新引用變量訪問子類型的成員。

上傳:您可以將引用變量明確或隱式地指定給超類型引用變量。這是一項固有的安全操作,因爲分配限制了新變量的訪問能力。

我引用這從Java rules for casting

2

異常消息指示該stub.call(...)方法正在返回HashMap[]和不HashMap

「修復」是要做到這一點:

HashMap<String, String>[] maps = (HashMap<String, String>[]) res; 

或者,如果你知道數組將包含一個元素,那麼:

HashMap<String, String> map = ((HashMap<String, String>[]) res)[0]; 

不幸的是,這兩個要向您發出有關未經檢查的轉化的警告。並且避免這種情況的唯一方法是使用通配符/原始類型;例如

HashMap<?, ?> map = ((HashMap<?, ?>[]) res)[0]; 
相關問題