为什么起作用? 我了解“超级父亲”只允许父亲和祖父
How to disable status bar click and pull down in Android?
此处的代码-------------------
公共类RxTest {
public static void main(String[] args) {
// extends -> read only
// super -> write only
List<? super Father> list = new ArrayList<>();
list.add(new Child());
list.add(new Child());
System.out.println(list.size()); // 2
// why does it work? I understood taht "? super Father" only allows Father and GrandFather
}
}
祖父级{ }
父级继承祖父{ }
班级子女扩展父亲{ }
答案 0 :(得分:1)
不要读“ ? super Father
”,因为“一切都是Father
的超类型。”
将其读取为“ 此列表中元素的预期类型是Father
的超类型”。这似乎是我在说同一件事,但事实并非如此。
是说创建 actual 列表的事物(不是通配引用)期望列表中的所有事物都是特定类型,并且该类型是{{1}的超类型}。您无法创建Father
,它必须是new ArrayList<? super/extends Something>
。
这样,您可以添加new ArrayList<Something>
的实例(其中包括Father
之类的子类型),而不会违反对列表中元素的期望。
记住PECS:
生产者扩展,超级消费者
Child
是List<? super Father>
实例的消费者。
与代码中的“ Father
”相同,不。您仍然可以从下限列表中读取内容,只需将所有内容都视为super -> write only
。
类似地,Object
并不意味着“只读”:您可以将列表中的现有元素添加到自身中,也可以添加文字extends
。