java - 无法将通用列表添加到通用 map

标签 java generics

我有一张通用 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/

相关文章:

java - 从 JDK8 升级到 JDK11 后奇怪的 java.lang.InstantiationException 和 java.lang.NoSuchMethodException

java - 如何使用嵌套的通用参数创建 MinMaxPriorityQueue?

java - 通用表模型

java - 如何使用 Parcelable 在 Activity 之间传递带有其他对象列表的对象?

java - Quartz为已经存在的作业添加触发器

java - android recyclerview 不显示项目

java - Java 中有类似 Objective-C 类别的东西吗?

Java 通用构建器

java - 为什么创建 Simple ImmutableMap 会导致未经检查的强制转换警告?

java - 使用 JAXB 和 Stax 对 XML 文档进行验证