Why can't we pass List<X> to a function which has List<superclass of X>? For a normal variable this is possible. 
Consider the MWE below. Why can we pass Integer to a function with a Number argument, and can't we not pass List<Integer> to List<Number>?
Questions:
- How can I efficiently/nicely (so without constructing a new List) work around this?
- What is the rationale of this language design decision?
MWE:
import java.util.ArrayList;
import java.util.List;
public class Tester {
    public static void main(String[] args) {
        Integer i = new Integer(2);
        // This works fine.
        processNumber(i);
        List<Integer> l = new ArrayList<Integer>();
        // ERROR "The method processNumberList(List<Number>) in the type 
        // Tester is not applicable for the arguments (List<Integer>)"
        processNumberList(l);   
    }
    private static void processNumber(Number n) {
    }
    private static void processNumberList(List<Number> l) { 
    }
}
 
     
    