我有一张通用 map
Map<String, List<A<?>>> map = new HashMap<>();
然后我有一个类似的列表:
List<A<Integer>> list1 = getData();
List<A<String>> list2 = getData2();
我正在尝试将它们添加到 map 中,但收到一条错误消息,指出参数错误。
map.put("a", list1);
map.put("b", list2);
//doesn't work
把 map 做成这样
Map<String, List<A>> map = HashMap<>();
也不起作用。 如何更改“ map ”才能添加这两个列表?
最佳答案
泛型不会递归求值。此处不会计算通配符 ( <?>
)。
如果您有 Map<String, List<A<?>>>
那么您必须添加 List<A<?>>
对它的值(value)观; List<A<Integer>>
不符合 List<A<?>>
的资格。 List<A<?>>
表示未知类型的 A 实例的 List,因此您必须传递未知类型的 A 实例的 List。
您可以做的是显式创建这样一个列表,并将类型化 A 列表的所有元素添加到其中:
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);
关于java - 无法将通用列表添加到通用 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49685216/