



Это вернет то же самое, что и ArrayList.class. Универсальные шаблоны Java стирают универсальный тип во время выполнения; другими словами, из «списка» вы никогда не узнаете, что тип элемента - String. По этому поводу есть отличный FAQ по адресу
http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
Это правда, что стирание делает невозможным получение общей информации о типе данного объекта, поскольку универсальные типы хранятся только в структуре исходного кода. Однако это не означает, что невозможно получить параметры универсального типа, и во многих важных случаях (например, создание интерфейсов для данного класса / метода) вы можете это сделать. Если вы получите элементы класса через отражение, вы можете получить общую информацию об используемых объявленных типах.
Например, возьмите java.lang.reflect.Method через отражение и позвоните, например, getGenericReturnType () на нем. Это вернет экземпляр java.lang.reflect.Type, который может быть просто Class, но также может быть экземпляром ParameterizedType или даже WildcardType, где это необходимо. Оба последних случая позволяют увидеть объявленные универсальные типы. Мне не известен какой-либо особенно элегантный способ справиться с этим, кроме проверок instanceof, но информация есть, если она вам нужна.
Это может предоставить информацию о типах универсальных полей, параметрах метода и возвращаемых типах, а также о самом классе (как его собственных универсальных параметрах, так и параметрах его суперкласса и реализованных интерфейсов). Это может быть очень полезно, если вам нужно выполнить безопасную проверку аргументов для универсальных методов в рефлексивном контексте.