While I was experimenting with Upper Bounded and Lower Bounded wildcards I found the following code snippet.
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);
I do not understand why
List<? super Integer>
accepts an
ArrayList<Number>
as an argument.
Since Number is the superclass for Integer and not Integer for Number I would expect to see an error.