为什么“ List super Integer> myList”作为方法中的参数可以接受ArrayList numberList = new ArrayList <>();

问题描述 投票:0回答:1

当我尝试使用上界通配符和下界通配符时,我发现了以下代码片段。

    static void numsUpTo(Integer num, List<? super Integer> output) {
    IntStream.rangeClosed(1, num)
            .forEach(output::add);
}

    ArrayList<Integer> integerList = new ArrayList<>();
    ArrayList<Number> numberList = new ArrayList<>();

    numsUpTo(5, integerList);
    numsUpTo(5, numberList);

我不明白为什么

List<? super Integer>

接受

ArrayList<Number>

作为参数。

因为Number是Integer的超类,而不是Number的Integer,所以我希望看到错误。

java wildcard lower-bound
1个回答
1
投票
List<? super Integer>

表示“将List添加到Integer”。

Integer添加到ArrayList<Number>是完全合理的,因为ArrayList的所有元素必须为Number s,并且IntegerNumber的子类。

© www.soinside.com 2019 - 2024. All rights reserved.