gpt4 book ai didi

上界和下界通配符的 Java 泛型

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:59 26 4
gpt4 key购买 nike

我在阅读 Java 泛型时遇到了一个有趣的查询。我的问题如下。

  1. 对于上限通配符

    public static void printList(List<? extends Number> list) {
    for (int i = 0; i < 10; i++) {
    list.add(i);// gives compilation error
    }
    }
  2. 对于下界通配符

    public static void printList(List<? super Integer> list) {
    for (int i = 0; i < 10; i++) {
    list.add(i);// successfully compiles
    }
    }

我对此感到困惑,因为查看 Sun Oracle 文档我了解到代码也应该针对第 1 点进行编译

Upper Bound Wildcard Lower Bound Wildcard

谁能帮我理解一下?

最佳答案

这是因为当您使用上限时,您不能将元素添加到集合中,只能读取它们。

这意味着这些是一些合法的分配:

List<? extends Number> l = new ArrayList<Integer>();
List<? extends Number> l = new ArrayList<Double>();

所以你不能保证在添加对象时,它会保存正确类型的对象。为了更好的解释,请遵循: How can I add to List<? extends Number> data structures?

关于上界和下界通配符的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com