2016-09-19 71 views
0

我有對象的集合:爪哇 - 通用吸氣

public LinkedHashMap<String, Object> objectList; 

,我希望得到一個字符串值,或用此方法整型值:

public Object getValue(String key) { 
    if (objectList.get(key) instanceof String) { 
    return ((String) objectList.get(key)); 
    } 
} 

後,我想用這個獲得者:

String value = getValue("someKey"); 

但是這不起作用,我不知道爲什麼。 getter返回Object,但如果這是String的實例,我將它轉換爲String。

你能告訴我爲什麼它不起作用嗎?或者其他解決方案。

謝謝。

+3

該方法的返回類型是Object,所以不管你在方法內部做了什麼,返回的引用類型都是Object。在這種情況下,您必須在它返回後將其轉換爲「String」。 – Zircon

+3

你認爲你把它轉換爲String的位置?你沒有。你也可以寫'public T getValue(String key)',那麼你就不需要投射了。方法實現應該說'return(T)objectList.get(key);' –

+0

這段代碼不能編譯,順便說一句,因爲如果值不是字符串,你不會返回任何東西。你也應該選擇更好的名字:objectList應該引用一個List,而不是Map。 –

回答

0

試試這個:

@SuppressWarnings("unchecked") 
public<T extends Object> T getValue(String key) { 
    return (T) objectList.get(key); 
} 

但要非常小心了這樣的事情!

+1

''是多餘的。你可以簡單地寫'public T getValue(String key){...}'。 – Turing85