作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如果我有这个,
Collection<? extends Number> c = new ArrayList<>();
c.add(new Integer(1)); // Compile time error
因为我们不知道c的元素类型代表什么,所以我们不能给它加整数。
如果我喜欢,
List<List<? extends Number>> history = new ArrayList<>();
List<Integer> integers = new ArrayList<>();
integers.add(new Integer(1));
List<Double> doubles = new ArrayList<>();
doubles.add(new Double(2));
history.add(integers); // This is allowed
history.add(doubles); // This is allowed
为什么允许在第二个示例中添加?
最佳答案
Collection<? extends ...>
c.add(...);
无法添加具有下限的集合。
List<List<...>> history;
history.add(...); // Allowed
外部列表具有具体类型。 ? extends
通配符在内部列表中,但它无关紧要,因为您要添加到外部列表。我用 ...
替换了通配符,因为当您调用 history.add()
时它是什么并不重要。
如果外部列表有通配符绑定(bind),则添加将失败。
List<? extends List<...>> history;
history.add(...); // NOT allowed
关于java - 具有有界通配符类型的数字列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56350451/
我是一名优秀的程序员,十分优秀!