Представьте, что вы изменились
Map<String,String> entry = new HashMap<String,String>();
до
Map<String,String> entry = new TreeMap<String,String>();
Теперь вы добавили TreeMap
к вашему ArrayList
из HashMap
.
Откажитесь от подстановочных знаков и используйте общий аргумент, который вам действительно нужен.
List<Map<String, String>> listEntries = new ArrayList<Map<String,String>>();
Обновление: чтобы сделать это более явным, изображение принимает ссылку на ArrayList
с оригинальными обобщениями.
List<HashMap<String,String>> orig = new ArrayList<HashMap<String,String>>();
List<? extends Map<String, String>> listEntries = orig;
listEntries.add(new TreeMap<>()); // Shouldn't work!
HashMap<String,String> treeMap = orig.get(0); // Oops!