问题
我有一个Object[]
阵列,我试图找到那些原始的。我试过使用Class.isPrimitive()
,但似乎我做错了什么:
int i = 3;
Object o = i;
System.out.println(o.getClass().getName() + ", " +
o.getClass().isPrimitive());
printsjava.lang.Integer, false
。
有正确的方法还是其他选择?
#1 热门回答(146 赞)
anObject[]
中的类型永远不会是原始的 - 因为你有参考!这里的类型为i
isint
,其中引用的对象类型为o
isInteger
(由于自动装箱)。
听起来你需要弄清楚这种类型是否是"原始包装"。我认为标准库中没有内置任何内容,但编码很容易:
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;
}
}
#2 热门回答(70 赞)
commons-langClassUtils
有相关方法。新版本有:
boolean isPrimitiveOrWrapped =
ClassUtils.isPrimitiveOrWrapper(object.getClass());
旧版本有4774704575方法,它将返回原始对应关系。所以你可以这样做:
boolean isPrimitiveOrWrapped =
clazz.isPrimitive() || ClassUtils.wrapperToPrimitive(clazz) != null;
#3 热门回答(23 赞)
Google的Guava库有一个Primitives实用程序,用于检查类是否是基元的包装类型:http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/primitives/Primitives.html
Primitives.isWrapperType(class)
Class.isPrimitive()适用于基元