Недействительно, так как если бы это было действительно, вы могли бы добавить нецелые списки в ml
.
Пример (не действует):
Map<String, List<Integer>> ml;
Map<String, List<?>> ml3 = ml;
ml3.put("strings", Arrays.asList("evil","string"));
List<Integer> l = ml.get("strings"); //see how this is going to fail?
Почему Map<String, ?> ml2 = ml;
действует? Это связано с тем, что использование подстановочного знака говорит компилятору не допускать добавления новых элементов, то есть ml2.put("strings", Arrays.asList("evil","string"));
не будет разрешен (компилятор не выполняет проверку типа, он просто видит шаблон и знает, что вы не должны называть этот метод.
«Карта>» - это карта, в которую вы можете поместить строку и список чего угодно. «Карта >» - это карта, в которую вы можете _only_ положить string и список целых чисел. –
khelwood