Tipo genérico anidado de Java

¿Cómo es que uno debe usar el tipo genérico?Map<?, ? extends List<?>> en lugar de un simpleMap<?, List<?>> para el siguientetest() ¿método?

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) {}

Notando que lo siguiente funciona, y que los tres métodos tienen el mismo tipo borrado de todos modos.

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta