Почему нам прежде всего нужен isPrimitive ()? - PullRequest
3 голосов
/ 28 марта 2019

Извините за неясный вопрос, но я действительно потерян, зачем нам нужно isPrimitive(), поскольку я не могу его использовать (извините, я просто не могу использовать его, когда мне это нужно; (печальное лицо здесь).

После прочтения постов тут и там я нашел некоторые использования как

int.class.isPrimitive()

Но я хотел бы иметь что-то как

boolean isTrue = true;
System.out.println(isTrue.class.isPrimitive());
System.out.println(Boolean.valueOf(isTrue).getClass().isPrimitive());

Я пытаюсьпроверять типы при обходе полей объекта; теперь я могу сделать следующее:

private static boolean isPrimitiveWrapper(Object obj) {
    return obj.getClass() == Boolean.class ||
            obj.getClass() == Byte.class ||
            obj.getClass() == Character.class ||
            obj.getClass() == Short.class ||
            obj.getClass() == Integer.class ||
            obj.getClass() == Long.class ||
            obj.getClass() == Float.class ||
            obj.getClass() == Double.class;
}

Но после проверки я думаю, что с этим должно быть что-то не так, но я не знаю, что этоis.

Любые варианты использования для этого будут по достоинству оценены;)

Я пытаюсь быть не слишком параноиком ... стараюсь изо всех силуже

1 Ответ

9 голосов
/ 28 марта 2019

Поскольку примитивные типы не могут рассматриваться как объекты в некоторых случаях, таких как массивы, это хорошо как первый дискриминатор.

Object cloneObject(Object obj) {
    Class<?> type = obj == null ? Object.class : obj.getClass();
    if (type.isArray()) {
        Class<?> elemType = type.getComponentType();
        if (!elemType.isPrimitive()) {
            Object[] copy = ...
        } else {
            // Must distinguish between int/double/boolean/...
            ... int[] ... double[] ...
        }
    }

Object inta = new int[] { 2, 3, 5, 7 };
int[] pr = (int[]) cloneObject(inta);
...