Обобщения, которые имеют конкретные типы, являющиеся частью объявлений (методы, поля, классы, аргументы), сохраняются.
Таким образом, вы можете получить типы из этой декларации
public List<String> toString(List<Foo> foos) { .. }
Но вы не можете из этого кода:
public List<E> transform(List<E> list) {
// E is not accessible at runtime
}