有界通配符类型的数字列表

时间:2019-05-28 21:46:20

标签: java generics

如果我有这个

td.red

由于我们不知道c的元素类型代表什么,因此无法向其中添加整数。

但是,如果我喜欢

Collection<? extends Number> c = new ArrayList<>();
c.add(new Integer(1)); // Compile time error

为什么允许在第二个示例中添加?

1 个答案:

答案 0 :(得分:9)

Collection<? extends ...>
c.add(...);

下界的集合无法添加。

List<List<...>> history;
history.add(...);      // Allowed

外部列表具有具体类型。 ? extends通配符在内部列表中,但是由于您要添加到外部列表,因此它是无关紧要的。我已将通配符替换为...,因为调用history.add()时它是什么无关紧要。

如果外部列表具有通配符绑定,则添加将失败。

List<? extends List<...>> history;
history.add(...);      // NOT allowed