如果我有这个
td.red
由于我们不知道c的元素类型代表什么,因此无法向其中添加整数。
但是,如果我喜欢
Collection<? extends Number> c = new ArrayList<>();
c.add(new Integer(1)); // Compile time error
为什么允许在第二个示例中添加?
答案 0 :(得分:9)
Collection<? extends ...>
c.add(...);
下界的集合无法添加。
List<List<...>> history;
history.add(...); // Allowed
外部列表具有具体类型。 ? extends
通配符在内部列表中,但是由于您要添加到外部列表,因此它是无关紧要的。我已将通配符替换为...
,因为调用history.add()
时它是什么无关紧要。
如果外部列表具有通配符绑定,则添加将失败。
List<? extends List<...>> history;
history.add(...); // NOT allowed