Ответ 1
? extends Object
Вы используете общий шаблон. Вы не можете выполнять операцию добавления, поскольку тип класса не определен. Вы не можете добавить/поставить что-нибудь (кроме null).
Для получения дополнительной информации об использовании подстановочного знака вы можете обратиться к oracle docs.
Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error
Так как мы не знаем, что означает тип элемента c, мы не можем добавлять к нему объекты. Метод add()
принимает аргументы type E
, типа элемента коллекции. Когда фактическим параметром типа ?
, это означает некоторое unknown type
. Любой параметр, который мы передаем для добавления, должен быть подтипом этого неизвестного типа. Поскольку мы не знаем, что это такое, мы ничего не можем передать. The sole exception is null, which is a member of every type
.