Consider the following Java code:
List<? super Number> list = new ArrayList<>();
Number n = new Integer(1);
Object o = new Object();
list.add(n); // works, apparently Number super Number is alright
list.add(o); // compiler error!
But why is that the case? Since internally, type erasure makes list a list that holds Objects, why isn't it allowed to add Objects (which are superclasses of all classes, and thereby should satisfy the lower-bound wildcard) to the list?