Java вложенный универсальный тип

Почему нужно использовать универсальный типMap<?,&nbsp;?&nbsp;extends&nbsp;List<?>>&nbsp;вместо простогоMap<?,&nbsp;List<?>>&nbsp;для следующихtest()&nbsp;метод?

public static void main(String[] args) {
    Map<Integer, List<String>> mappy =
        new HashMap<Integer, List<String>>();

    test(mappy);
}

public static void test(Map<?, ? extends List<?>> m) {}

// Doesn't compile
// public static void test(Map<?, List<?>> m) {}

Отмечая, что следующее работает, и что три метода в любом случае имеют один и тот же стертый тип.

public static <E> void test(Map<?, List<E>> m) {}