Вопреки мнению большинства разработчиков Java, можно хранить информацию о типе во время компиляции и извлекать эту информацию во время выполнения, несмотря на то, что она очень ограничена. Другими словами: Java предоставляет расширенные дженерики очень ограниченным образом .
Относительно типа стирания
Обратите внимание, что во время компиляции у компилятора имеется полная информация о типе, но эта информация намеренно отбрасывается в общем при генерировании двоичного кода в процессе, известном как стирание типа . Это делается из-за проблем совместимости: целью разработчиков языка было обеспечение полной совместимости исходного кода и полной двоичного кода между версиями платформы. Если бы он был реализован по-другому, вам пришлось бы перекомпилировать устаревшие приложения при переходе на более новые версии платформы. Таким образом, все сигнатуры методов сохраняются (совместимость с исходным кодом), и вам не нужно ничего перекомпилировать (двоичная совместимость).
Относительно улучшенных обобщений в Java
Если вам нужно хранить информацию о типе во время компиляции, вам нужно использовать анонимные классы.
Дело в том, что в особом случае анонимных классов можно получить полную информацию о типе во время компиляции, что, другими словами, означает: reified generics.
Я написал статью на эту тему:
http://rgomes -info.blogspot.co.uk / 2013/12 / с использованием-typetokens к извлечению-generic.html
В статье я описываю, как наши пользователи реагировали на эту технику. В двух словах, это неясный предмет, и техника (или шаблон, если вы предпочитаете) выглядит посторонним для большинства разработчиков Java.
Пример кода
В статье, о которой я упоминал выше, есть ссылки на исходный код, в котором реализована идея.