Как получить доступ к объекту класса для дженериков?

Как я могу получить доступ к объекту Class для Generics?

В настоящее время я делаю это так:

List<String> list= new ArrayList<String>();
list.getClass();

Это нормально? Или каким должен быть способ?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
826
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это вернет то же самое, что и 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, но информация есть, если она вам нужна.

Это может предоставить информацию о типах универсальных полей, параметрах метода и возвращаемых типах, а также о самом классе (как его собственных универсальных параметрах, так и параметрах его суперкласса и реализованных интерфейсов). Это может быть очень полезно, если вам нужно выполнить безопасную проверку аргументов для универсальных методов в рефлексивном контексте.

Другие вопросы по теме