public void myMethod( Map<String, List<String>> map ) {
map.put("foo", Collections.singletonList("bar") );
}
Нельзя поместить List
(тип возврата Collections.singletonList()
в Map
из ? extends List
, поскольку фактическим типом может быть любая реализация List
. Например, это не безопасно помещать универсальный List
в Map<String,LinkedList>
, поскольку List
может не быть LinkedList
. Однако мы можем легко поместить LinkedList
в Map
из <String,List>
.
Я думаю, что вы перестали думать о своих дженериках. Вам не нужно использовать ? extends
для неуниверсального класса. Например, List<Object>
будет содержать любые Object
, ? extends
не требуется для добавления объекта. List<List<Foo>>
будет принимать только List<Foo>
объекты, а не List<FooSubclass>
объекты [Универсальные классы не наследуют в зависимости от своих параметров]. Здесь ? extends
вступает в игру. Чтобы добавить List<Foo>
и List<FooSubclass>
к List
, тип должен быть List<List<? extends Foo>>
.