我有一个Object[]数组,并且我正在尝试寻找那些是基本类型的数组。我试过使用Class.isPrimitive(),但似乎做错了什么:
int i = 3;
Object o = i;
System.out.println(o.getClass().getName() + ", " +
                   o.getClass().isPrimitive());打印java.lang.Integer, false。
有没有正确的方法或其他选择?
发布于 2009-04-02 14:40:23
Object[]中的类型永远不会是原始的--因为你已经有了引用!这里,i的类型是int,而o引用的对象类型是Integer (由于自动装箱)。
听起来你需要找出这个类型是否是“原语的包装器”。我不认为标准库中有任何内置的东西,但是很容易编写代码:
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;
    }
}发布于 2010-09-30 22:21:51
commons-lang ClassUtils有相关的方法。
新版本有:
boolean isPrimitiveOrWrapped = 
    ClassUtils.isPrimitiveOrWrapper(object.getClass());老版本有wrapperToPrimitive(clazz)方法,它会返回原始的对应关系。
boolean isPrimitiveOrWrapped = 
    clazz.isPrimitive() || ClassUtils.wrapperToPrimitive(clazz) != null;发布于 2012-01-31 23:07:03
谷歌的Guava库有一个Primitives utility,可以检查一个类是否是一个原语的包装器类型:Primitives.isWrapperType(class)。
Class.isPrimitive()适用于原语
https://stackoverflow.com/questions/709961
复制相似问题