Обобщения Java используют стирание типов, поэтому во время выполнения нет никакой разницы между List
, List<String>
и List<Integer>
. Все на самом деле просто List
с. При компиляции компилятор принудительно применяет тип параметра шаблона, но под прикрытием во время выполнения у вас есть List
.
На самом деле, если вы попытаетесь использовать отражение, чтобы найти тип параметра шаблона, вы не сможете.