Determinar si un Objeto es de tipo primitivo

Resuelto drill3r asked hace 15 años • 18 respuestas

Tengo una Object[]matriz y estoy tratando de encontrar las que son primitivas. Intenté usarlo Class.isPrimitive(), pero parece que estoy haciendo algo mal:

int i = 3;
Object o = i;

System.out.println(o.getClass().getName() + ", " +
                   o.getClass().isPrimitive());

impresiones java.lang.Integer, false.

¿Existe una forma correcta o alguna alternativa?

drill3r avatar Apr 02 '09 21:04 drill3r
Aceptado

Los tipos en an Object[]nunca serán realmente primitivos, ¡porque tienes referencias! Aquí el tipo de ies intmientras que el tipo del objeto al que se hace referencia oes Integer(debido al boxeo automático).

Parece que necesita saber si el tipo es un "envoltorio para primitivo". No creo que haya nada integrado en las bibliotecas estándar para esto, pero es fácil de codificar:

import java.util.*;

public class Test
{
    public static void main(String[] args)        
    {
        System.out.println(isWrapperType(String.class));
        System.out.println(isWrapperType(Integer.class));
    }

    private static final Set<Class<?>> WRAPPER_TYPES = getWrapperTypes();

    public static boolean isWrapperType(Class<?> clazz)
    {
        return WRAPPER_TYPES.contains(clazz);
    }

    private static Set<Class<?>> getWrapperTypes()
    {
        Set<Class<?>> ret = new HashSet<Class<?>>();
        ret.add(Boolean.class);
        ret.add(Character.class);
        ret.add(Byte.class);
        ret.add(Short.class);
        ret.add(Integer.class);
        ret.add(Long.class);
        ret.add(Float.class);
        ret.add(Double.class);
        ret.add(Void.class);
        return ret;
    }
}
Jon Skeet avatar Apr 02 '2009 14:04 Jon Skeet

commons-lang tiene métodosClassUtils relevantes .

La nueva versión tiene:

boolean isPrimitiveOrWrapped = 
    ClassUtils.isPrimitiveOrWrapper(object.getClass());

Las versiones antiguas tienen wrapperToPrimitive(clazz)un método que devolverá la correspondencia primitiva .

boolean isPrimitiveOrWrapped = 
    clazz.isPrimitive() || ClassUtils.wrapperToPrimitive(clazz) != null;
Bozho avatar Sep 30 '2010 14:09 Bozho

La biblioteca Guava de Google tiene una utilidad Primitives que verifica si una clase es un tipo contenedor para una primitiva: Primitives.isWrapperType(class).

Class.isPrimitive() funciona para primitivas

Andrejs avatar Jan 31 '2012 15:01 Andrejs