我有一张通用地图
Map<String, List<A<?>>> map = new HashMap<>();
然后我有一个列表:
List<A<Integer>> list1 = getData();
List<A<String>> list2 = getData2();
我正在尝试将它们添加到地图中,但我收到的错误是说这个论点是错误的。
map.put("a", list1);
map.put("b", list2);
//doesn't work
制作地图
Map<String, List<A>> map = HashMap<>();
也不起作用。 如何更改“地图”以便能够添加这两个列表?
答案 0 :(得分:3)
泛型不会递归评估。通配符(<?>
)未在此处进行评估。
如果您有Map<String, List<A<?>>>
,那么必须为其添加List<A<?>>
值; List<A<Integer>>
不符合List<A<?>>
的条件。 List<A<?>>
表示具有未知类型的实例列表,因此您必须传递具有未知类型的A实例列表。
你可以做的是明确地创建这样一个List,并将你输入的A List的所有元素添加到它:
List<A<Integer>> list1 = getData();
List<A<String>> list2 = getData2();
List<A<?>> list1Unknown = new ArrayList<>();
list1.forEach(list1Unknown::add);
List<A<?>> list2Unknown = new ArrayList<>();
list2.forEach(list2Unknown::add);
map.put("a", list1Unknown);
map.put("b", list2Unknown);
答案 1 :(得分:-2)
如果您只想在地图中放置任意两个列表,请使用:Map<String, List> map = new HashMap<>();
。
或者,如果要限制要添加的列表类型:
Map<String, List<? extends Object>> map = new HashMap<>();
。
为什么我选择扩展Object
是因为它是Integer
和String
层次结构中唯一存在的类。