Java 向多重映射添加扩展类

Java 向多重映射添加扩展类,java,generics,Java,Generics,我正在尝试创建一个多重贴图,如下所示: Multimap<String, ? extends A> order = LinkedListMultimap.create(); B b = new B(); order.put("key", b); // shows error 错误如下: Multimap<String, ? extends A> order = LinkedListMultimap.create(); B b = new B(); order.put("

我正在尝试创建一个多重贴图,如下所示:

Multimap<String, ? extends A> order = LinkedListMultimap.create();
B b = new B();
order.put("key", b); // shows error
错误如下:

Multimap<String, ? extends A> order = LinkedListMultimap.create();
B b = new B();
order.put("key", b); // shows error
类型
Multimap
中的方法
put(String,capture#2-of?扩展了A)
不适用于参数
(String,B)


我应该能够添加一个
B
,因为
B
扩展了
a
。但是我不能。

您不能向顺序添加值,因为它们是关键的

? extends A

编译器不知道下限类型。

如果您指的是从
String
a
类型的对象或
a
的任何子类型的多重映射,那么这就是
多重映射。如果您指的是从
字符串
a
的某些特定但未知子类型的对象的多重映射,那么这就是a
多重映射

,例如,如果C也扩展了a,我想将B和C都添加到多重映射中。为了实现这一点,我是否应该将多重映射配置为?延伸一个??不,你不应该;在这种情况下,您确实需要
Multimap
。A
Multimap
表示存在扩展
A
的特定类型
X
,而
Multimap
实际上是一个
Multimap
,但您不知道
X
是什么。您不能将除
null
之外的任何值放入
多重映射中。