有谁可以让我知道为什么这不起作用?
List<? super Person> list = new ArrayList<>();
list.add(new Object());
我的理解是变量列表可以包含任何值,只要它是Person的超类。对象绝对是Person的超类,那么为什么它不能被添加到列表中呢?
答案 0 :(得分:0)
假设您的类层次结构为Object -> Movable -> Person
,在这种情况下List<? super Person>
可以指向:
Movable
(List<Movable>
)或Object
(List<Object>
)您不知道哪些类型的元素(Movable
或Object
)列表将在运行时完全具有(泛型是编译时现象)。
这就是在这种情况下不允许插入的原因,因为它可能最终在运行时将Object
添加到Movable
列表中。所以黄金法则是Producer Extends Consumer Super
。