【问题标题】:Adding extended class to multimap [duplicate]将扩展类添加到多图 [重复]
【发布时间】:2013-04-19 19:21:15
【问题描述】:

我正在尝试按如下方式创建多图:

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

B 在哪里

class B extends A {} 

错误如下:

Multimap&lt;String,capture#2-of ? extends A&gt; 类型中的方法put(String, capture#2-of ? extends A) 不适用于参数(String, B)

我应该可以添加B,因为B 扩展了A。但我做不到。

【问题讨论】:

    标签: java generics


    【解决方案1】:

    如果您意思是StringA 类型的对象或A 的任何子类型的多映射,那么这就是Multimap&lt;String, A&gt;。如果您的意思是从StringA 的某些特定但未知 子类型的对象的多映射,那么这就是Multimap&lt;String, ? extends A&gt;

    【讨论】:

    • 例如,如果 C 还扩展了 A 并且我想将 B 和 C 添加到多重映射中。为了做到这一点,我不应该将 Multimap 配置为?扩展 A??
    • 不,你不应该;在那种情况下,你真的想要Multimap&lt;String, A&gt;
    • A Multimap&lt;String, ? extends A&gt; 表示有一些特定类型X 扩展了A,而Multimap 实际上是一个Multimap&lt;String, X&gt;,但你不知道X 是什么是。您不能将除null 之外的任何 值放入Multimap&lt;String, ? extends A&gt;
    【解决方案2】:

    您不能向 order 添加值,因为它们的键是

    ? extends A
    

    编译器不知道下限类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多