【发布时间】:2015-10-01 16:11:06
【问题描述】:
谁能告诉我为什么这不起作用?
List<? super Person> list = new ArrayList<>();
list.add(new Object());
我的理解是,变量 list 可以保存任何值,只要它是 Person 的超类。 Object 肯定是 Person 的超类,那为什么不能加入列表呢?
【问题讨论】:
谁能告诉我为什么这不起作用?
List<? super Person> list = new ArrayList<>();
list.add(new Object());
我的理解是,变量 list 可以保存任何值,只要它是 Person 的超类。 Object 肯定是 Person 的超类,那为什么不能加入列表呢?
【问题讨论】:
假设您有一个类层次结构为Object -> Movable -> Person,在这种情况下List<? super Person> 可以指向:
Movable(List<Movable>)列表或Object(List<Object>)列表你不知道什么类型的元素(Movable 或Object)列表将在运行时准确(泛型是编译时现象)。
这就是在这种情况下不允许插入的原因,因为它最终可能会在运行时将Object 添加到Movable 列表中。所以黄金法则是Producer Extends Consumer Super。
【讨论】: