Java Generics下限

时间:2015-10-01 08:06:55

标签: java generics

有谁可以让我知道为什么这不起作用?

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

我的理解是变量列表可以包含任何值,只要它是Person的超类。对象绝对是Person的超类,那么为什么它不能被添加到列表中呢?

1 个答案:

答案 0 :(得分:0)

假设您的类层次结构为Object -> Movable -> Person,在这种情况下List<? super Person>可以指向:

  1. MovableList<Movable>)或
  2. 的列表
  3. ObjectList<Object>
  4. 的列表

    您不知道哪些类型的元素(MovableObject)列表将在运行时完全具有(泛型是编译时现象)。

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