2016-09-19 42 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