我希望有一个方法可以返回从地图中提取的所需对象类型。 这是一个例子
Map<String,Object> map = new HashMap<>();
map.put("ids", Arrays.asList(5,345,45645));
map.put("id", 325);
<T> T get(String arg, Class<T> clazz) {
return (T) map.get(arg);
}
然后,例如,可以使用此代码获取Integer
Integer id = get("id", Integer.class);
但是当我试图以这些方式获取对象列表时
List<Integer> ids = get("ids", new ArrayList<Integer>().getClass());
List<Integer> ids = get("id", List.class);
Intellij IDEA警告:Unchecked assignment: 'java.util.ArrayList' to 'java.util.List<java.lang.Integer>'
我期待List<Integer>.class
之类的东西(类似于Integer.class
,Boolean.class
等......)将用作什么
List<Integer> ids = get("ids", List<Integer>.class`)
但这不是编译的。
那么有解决方案吗?
答案 0 :(得分:2)
您实际上并不需要Class
参数。
<T> T unsafeGet(String arg) {
return (T) map.get(arg);
}
我重命名了该方法,因为您丢弃所有编译器类型检查。
这两行编译,但在运行时失败:
Integer ids = unsafeGet("ids"); // java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.Integer
Element id = unsafeGet("id"); // java.lang.ClassCastException: java.lang.Integer cannot be cast to org.w3c.dom.Element