Это правда, что стирание делает невозможным получение информации об общем типе данного объекта, поскольку обобщения хранятся только в структуре исходного кода. Однако это не означает, что невозможно получить параметры общего типа, и во многих важных случаях (например, создание интерфейсов для данного класса / метода) вы можете это сделать. Если вы овладеете элементами класса посредством отражения, вы можете получить общую информацию об объявленных используемых типах.
Например, возьмите java.lang.reflect.Method
с помощью отражения и позвоните, например, getGenericReturnType () на нем. Это вернет экземпляр java.lang.reflect.Type
, который может быть просто Class
, но также может быть экземпляром ParameterizedType
или даже WildcardType
, где это необходимо. Оба этих последних случая позволяют вам видеть объявленные универсальные типы. Я не знаю ни одного особенно элегантного способа справиться с этим, кроме instanceof
проверок, но информация есть, если вам это нужно.
Это может дать информацию о универсальных типах полей, параметрах методов и возвращаемых типах, а также о самом классе (как его собственных универсальных параметрах, так и его суперклассе и реализованных интерфейсах). Это может быть очень полезно, если вам нужно выполнить типобезопасную проверку аргументов для универсальных методов в отражающем контексте.