cha*_*uru 8 java generics collections wildcard
我正在阅读java泛型,我遇到了一个有趣的查询.我的问题如下.
对于上限有界的通配符
public static void printList(List<? extends Number> list) {
for (int i = 0; i < 10; i++) {
list.add(i);// gives compilation error
}
}
Run Code Online (Sandbox Code Playgroud)对于较低的有界通配符
public static void printList(List<? super Integer> list) {
for (int i = 0; i < 10; i++) {
list.add(i);// successfully compiles
}
}
Run Code Online (Sandbox Code Playgroud)我对此感到困惑,因为查看Sun Oracle文档,我理解代码也应该为第1点编译
有人可以帮我理解这个吗?
这是因为当您使用上限时,无法将元素添加到集合中,只能读取它们.
这意味着这些是一些合法的任务:
List<? extends Number> l = new ArrayList<Integer>();
List<? extends Number> l = new ArrayList<Double>();
Run Code Online (Sandbox Code Playgroud)
所以你无法保证在添加对象时它会保存正确类型的对象.为了更好的解释,请遵循: 如何添加到列表<?扩展Number>数据结构?
| 归档时间: |
|
| 查看次数: |
7430 次 |
| 最近记录: |