Чтобы получить класс из универсального типа в Java, вы можете использовать следующие методы:
-
Использование метода
getClass(). Если у вас есть экземпляр универсального типа, вы можете вызвать для него методgetClass(). экземпляр для получения его класса времени выполнения. Например:List<String> list = new ArrayList<>(); Class<?> clazz = list.getClass();В этом примере
clazzбудет ссылаться на классArrayList. -
Использование отражения. Отражение позволяет проверять классы и манипулировать ими во время выполнения. Вы можете использовать методы
getGenericSuperclass()илиgetGenericInterfaces(), предоставляемые классомClass, для получения информации об универсальном типе. Например:ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass(); Class<?> genericClass = (Class<?>) type.getActualTypeArguments()[0];В этом примере предполагается, что вы находитесь внутри подкласса универсального класса, и извлекается первый фактический аргумент типа.
-
Использование TypeToken из библиотеки Google Guava. Библиотека Google Guava предоставляет класс
TypeToken, который позволяет захватывать универсальные типы и манипулировать ими во время выполнения. Вы можете использовать его для извлечения информации о классе из универсального типа. Например:TypeToken<List<String>> token = new TypeToken<List<String>>() {}; Class<?> clazz = token.getRawType();В этом примере
clazzбудет ссылаться на классList. -
Использование TypeResolver из библиотеки TypeTools. Библиотека TypeTools предоставляет класс
TypeResolver, который может разрешать универсальные типы во время выполнения. Вы можете использовать его для извлечения информации о классе из универсального типа. Например:Type type = TypeResolver.resolveGenericType(List.class, String.class); Class<?> clazz = TypeResolver.resolveRawClass(type, null);В этом примере
clazzбудет ссылаться на классList.