Захват подстановочных знаков в дженериках Java
Изэто Oracle Java, учебник:
Пример WildcardError создает ошибку захвата при компиляции:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
После этой ошибки они решают проблему с помощью вспомогательного метода:
public class WildcardFixed {
void foo(List<?> i) {
fooHelper(i);
}
// Helper method created so that the wildcard can be captured
// through type inference.
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
}
Сначала говорят, что входной параметр списка (i
) рассматривается какObject
:
В этом примере компилятор обрабатываетi
входной параметр имеет тип объекта.
Тогда почемуi.get(0)
не возвращаетObject
? если это уже было передано как таковое?
Кроме того, какой смысл использовать<?>
когда тогда вы должны использовать вспомогательный метод, используя<T>
, Не лучше было бы использовать напрямуюT
что можно сделать вывод?