用于上限和下限通配符的Javagenerics
我正在阅读javagenerics,我遇到了一个有趣的查询。 我的问题如下。
-
对于上限有界的通配符
public static void printList(List list) { for (int i = 0; i < 10; i++) { list.add(i);// gives compilation error } }
-
对于较低的有界通配符
public static void printList(List list) { for (int i = 0; i < 10; i++) { list.add(i);// successfully compiles } }
我对此感到困惑,因为查看Sun Oracle文档,我理解代码也应该为第1点编译
上限通配符 下界通配符
有人可以帮我理解这个吗?
这是因为当您使用上限时,无法将元素添加到集合中,只能读取它们。
这意味着这些是一些合法的任务:
List extends Number> l = new ArrayList(); List extends Number> l = new ArrayList();
所以你无法保证在添加对象时它会保存正确类型的对象。 为了更好的解释,请遵循: 如何添加到列表<? 扩展Number>数据结构?
实际上,幸运的是同样的情况,我在Sun Oracle文档的下一页中得到了答案。 请找到以下链接。 可能对将来会搜索的人有用。
通配符捕获