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

    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,因此我希望看到一个错误。

最佳答案

List<? super Integer>


表示“将List添加到的List(或Integer子类的实例)”。

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

10-07 19:43
查看更多