cim*_*ine 0 java generics casting
为什么不是Map<String,List<SomeBean>>
施法者Map<String,List<?>>
?
我现在正在做的是:
Map<String, List<SomeBean>> fromMap = new LinkedHashMap<String, List<SomeBean>>();
/* filling in data to fromMap here */
Map<String,List<?>> toMap = new LinkedHashMap<String, List<?>>();
for (String key : fromMap.keySet()) {
toMap.put(key, fromMap.get(key));
}
Run Code Online (Sandbox Code Playgroud)
在我看来,应该有一种解决这种手动转换的方法,但我无法弄清楚如何.有任何想法吗?
强制转换是无效的,因为在Map <String,List <?>>中可以放置List <String>和List <WhatEver>,但不能放在Map <String,List <SomeBean >>中.
例如:
//List<SomeBean> are ok in both lists
fromMap.put("key", new ArrayList<SomeBean>());
toMap.put("key", new ArrayList<SomeBean>());
//List<String> are ok in Map<String,List<?>>, not in Map<String, List<SomeBean>>
fromMap.put("key", new ArrayList<String>()); //DOES NOT COMPILE
toMap.put("key", new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)
为了简化代码,您可以使用适当的构造函数来简化代码:
Map<String, List<SomeBean>> fromMap = new LinkedHashMap<String, List<SomeBean>>();
Map<String,List<?>> toMap = new LinkedHashMap<String, List<?>>(fromMap);
Run Code Online (Sandbox Code Playgroud)