Determinar si un Objeto es de tipo primitivo
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?
Los tipos en an Object[]
nunca serán realmente primitivos, ¡porque tienes referencias! Aquí el tipo de i
es int
mientras que el tipo del objeto al que se hace referencia o
es 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;
}
}
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;
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