Как получить класс из универсального типа в Java: изучение методов и примеров

Чтобы получить класс из универсального типа в Java, вы можете использовать следующие методы:

  1. Использование метода getClass(). Если у вас есть экземпляр универсального типа, вы можете вызвать для него метод getClass(). экземпляр для получения его класса времени выполнения. Например:

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

    В этом примере clazzбудет ссылаться на класс ArrayList.

  2. Использование отражения. Отражение позволяет проверять классы и манипулировать ими во время выполнения. Вы можете использовать методы getGenericSuperclass()или getGenericInterfaces(), предоставляемые классом Class, для получения информации об универсальном типе. Например:

    ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
    Class<?> genericClass = (Class<?>) type.getActualTypeArguments()[0];

    В этом примере предполагается, что вы находитесь внутри подкласса универсального класса, и извлекается первый фактический аргумент типа.

  3. Использование TypeToken из библиотеки Google Guava. Библиотека Google Guava предоставляет класс TypeToken, который позволяет захватывать универсальные типы и манипулировать ими во время выполнения. Вы можете использовать его для извлечения информации о классе из универсального типа. Например:

    TypeToken<List<String>> token = new TypeToken<List<String>>() {};
    Class<?> clazz = token.getRawType();

    В этом примере clazzбудет ссылаться на класс List.

  4. Использование TypeResolver из библиотеки TypeTools. Библиотека TypeTools предоставляет класс TypeResolver, который может разрешать универсальные типы во время выполнения. Вы можете использовать его для извлечения информации о классе из универсального типа. Например:

    Type type = TypeResolver.resolveGenericType(List.class, String.class);
    Class<?> clazz = TypeResolver.resolveRawClass(type, null);

    В этом примере clazzбудет ссылаться на класс List.