List<List<?>>
- это , а не . Супертип List<List<String>>
.
List<List<?>>
означает, что этот объект является списком, содержащим списки неизвестных объектов.
List<List<String>>
означает, что этот объект является списком, содержащим списки String
объектов.
Как видите, в первом примере список может содержать любой объект, необязательно супертипыиз String
.
ОБНОВЛЕНИЕ:
Хорошо, вот несколько подробных объяснений.
Знак вопроса (?) означает: «любой возможный типобъекта "или" любого объекта, расширяющего Object
и самого Object
".Примерно List<?>
можно считать List<Object>
.
Является ли Object
супертипом String
?Да, это.Но рассмотрим этот пример:
class A {
}
List<A> list1 = new ArrayList<>();
List<String> listOfStrings = new ArrayList<>();
List<?> unknownList = list1;
Означает ли это, что unknownList
содержит объекты супертипов String? Нет .
Это только означает, что этот список может содержать любой объект, который расширяет Object
или Object
сам по себе и должен обрабатываться соответствующим образом.