Java Generics for Upper bound & lower bound wild cards
我正在阅读Java泛型,我遇到了一个有趣的查询。我的问题如下。
对于上界通配符
1 2 3 4 5 | public static void printList(List<? extends Number> list) { for (int i = 0; i < 10; i++) { list.add(i);// gives compilation error } } |
对于下限通配符
1 2 3 4 5 | public static void printList(List<? super Integer> list) { for (int i = 0; i < 10; i++) { list.add(i);// successfully compiles } } |
号
我对此感到困惑,因为在查看Sun Oracle文档时,我了解到代码也应该针对点1进行编译。
上界通配符下界通配符
有人能帮我理解吗?
这是因为当使用上界时,不能向集合中添加元素,只能读取它们。
这意味着这些是一些法律任务:
1 2 | List<? extends Number> l = new ArrayList<Integer>(); List<? extends Number> l = new ArrayList<Double>(); |
因此,您不能保证在添加对象时,它将保存正确的对象类型。为了更好的解释,请遵循:如何添加到列表<?扩展数字>数据结构?
实际上,幸运的是,同样的场景,我在Sun Oracle文档的下一页得到了答案。请找到下面的链接。可能对将来要搜索的人有用。
通配符捕获