Рубрики
Без рубрики

Определите, является ли объект примитивным типом

Узнайте, как определить, является ли объект примитивным типом, используя Java.

Автор оригинала: baeldung.

1. Обзор

Иногда нам нужно определить, является ли объект примитивным типом, особенно для примитивных типов оболочек. Однако в стандартном JDK нет встроенных методов для достижения этой цели.

В этом кратком руководстве мы рассмотрим, как реализовать решение с использованием ядра Java. Затем мы рассмотрим, как мы можем достичь этого, используя пару часто используемых библиотек.

2. Примитивы и классы-оболочки

Существует девять предопределенных объектов для представления восьми примитивов и типа void в Java. Каждый примитивный тип имеет соответствующий Класс-оболочку .

Чтобы узнать больше о Примитивах и объектах , пожалуйста, ознакомьтесь с этой статьей .

То То . isPrimitive() метод может определить, представляет ли указанный объект примитивный тип. Однако он не работает на обертках для примитивов.

Например, следующий оператор возвращает false :

Integer.class.isPrimitive();

Теперь давайте рассмотрим различные способы достижения этой цели.

3. Использование ядра Java

Во-первых, давайте определим переменную HashMap, которая хранит оболочку и классы примитивных типов:

private static final Map, Class> WRAPPER_TYPE_MAP;
static {
    WRAPPER_TYPE_MAP = new HashMap, Class>(16);
    WRAPPER_TYPE_MAP.put(Integer.class, int.class);
    WRAPPER_TYPE_MAP.put(Byte.class, byte.class);
    WRAPPER_TYPE_MAP.put(Character.class, char.class);
    WRAPPER_TYPE_MAP.put(Boolean.class, boolean.class);
    WRAPPER_TYPE_MAP.put(Double.class, double.class);
    WRAPPER_TYPE_MAP.put(Float.class, float.class);
    WRAPPER_TYPE_MAP.put(Long.class, long.class);
    WRAPPER_TYPE_MAP.put(Short.class, short.class);
    WRAPPER_TYPE_MAP.put(Void.class, void.class);
}

Если объект является примитивным классом-оболочкой, мы можем посмотреть его из предопределенного Хэш-карта переменная с java.util.Map.containsKey() метод.

Теперь мы можем создать простой служебный метод, чтобы определить, является ли источник объекта примитивным типом:

public static boolean isPrimitiveType(Object source) {
    return WRAPPER_TYPE_MAP.containsKey(source.getClass());
}

Давайте проверим, что это работает так, как ожидалось:

assertTrue(PrimitiveTypeUtil.isPrimitiveType(false));
assertTrue(PrimitiveTypeUtil.isPrimitiveType(1L));
assertFalse(PrimitiveTypeUtil.isPrimitiveType(StringUtils.EMPTY));

4. Использование Apache Commons – ClassUtils.isPrimitiveOrWrapper()

Apache Commons Lang имеет ClassUtils . primitivetowrapper метод, который можно использовать для определения, является ли класс примитивом или оболочкой примитива .

Во-первых, давайте добавим commons-lang3 зависимость от Maven Central в наш pom.xml :


    org.apache.commons
    commons-lang3
    3.11

Тогда давайте проверим это:

assertTrue(ClassUtils.isPrimitiveOrWrapper(Boolean.False.getClass()));
assertTrue(ClassUtils.isPrimitiveOrWrapper(boolean.class));
assertFalse(ClassUtils.isPrimitiveOrWrapper(StringUtils.EMPTY.getClass()));

5. Использование примитивов Гуавы.isWrapperType()

Guava обеспечивает аналогичную реализацию с помощью примитивов .Метод isWrapperType .

Опять же, давайте сначала добавим зависимость от Maven Central :


    com.google.guava
    guava
    29.0-jre

Аналогично, мы можем протестировать его с помощью:

assertTrue(Primitives.isWrapperType(Boolean.FALSE.getClass()));
assertFalse(Primitives.isWrapperType(StringUtils.EMPTY.getClass()));

Однако Примитивы.Метод isWrapperType не будет работать с примитивным классом, следующий код вернет false:

assertFalse(Primitives.isWrapperType(boolean.class));

6. Заключение

В этом руководстве мы проиллюстрировали, как определить, может ли объект представлять примитивный тип данных, используя нашу собственную реализацию с использованием Java. Затем мы взглянули на пару популярных библиотек, которые предоставляют полезные методы для достижения этой цели.

Полный код можно найти на Github .