【问题标题】:Java Generics lowerbound [duplicate]Java泛型下界[重复]
【发布时间】:2015-10-01 16:11:06
【问题描述】:

谁能告诉我为什么这不起作用?

List<? super Person> list = new ArrayList<>();
list.add(new Object());

我的理解是,变量 list 可以保存任何值,只要它是 Person 的超类。 Object 肯定是 Person 的超类,那为什么不能加入列表呢?

【问题讨论】:

    标签: java generics


    【解决方案1】:

    假设您有一个类层次结构为Object -&gt; Movable -&gt; Person,在这种情况下List&lt;? super Person&gt; 可以指向:

    1. MovableList&lt;Movable&gt;)列表或
    2. Object(List&lt;Object&gt;)列表

    你不知道什么类型的元素(MovableObject)列表将在运行时准确(泛型是编译时现象)。

    这就是在这种情况下不允许插入的原因,因为它最终可能会在运行时将Object 添加到Movable 列表中。所以黄金法则是Producer Extends Consumer Super

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2014-01-12
      • 2018-04-27
      相关资源
      最近更新 更多