确定对象是否是原始类型

确定对象是否是原始类型

我有一个Object[]数组,我试图找到原始的数组。我试过用Class.isPrimitive(),但似乎我做错了什么:

int i = 3;Object o = i;System.out.println(o.getClass().getName() + ", " +
                   o.getClass().isPrimitive());

打印java.lang.Integer, false

有正确的方法或替代方案吗?


偶然的你
浏览 471回答 3
3回答

largeQ

一个中的类型Object[]永远不会真正原始 - 因为你有参考!这里的类型i是,int而引用的对象的类型o是Integer(由于自动装箱)。听起来你需要找出这个类型是否是“原始包装器”。我不认为标准库中有任何内置,但编码很容易:import&nbsp;java.util.*;public&nbsp;class&nbsp;Test{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(isWrapperType(String.class)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(isWrapperType(Integer.class)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;Set<Class<?>>&nbsp;WRAPPER_TYPES&nbsp;=&nbsp;getWrapperTypes(); &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;boolean&nbsp;isWrapperType(Class<?>&nbsp;clazz) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;WRAPPER_TYPES.contains(clazz); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Set<Class<?>>&nbsp;getWrapperTypes() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set<Class<?>>&nbsp;ret&nbsp;=&nbsp;new&nbsp;HashSet<Class<?>>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Boolean.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Character.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Byte.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Short.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Integer.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Long.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Float.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Double.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(Void.class); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret; &nbsp;&nbsp;&nbsp;&nbsp;}}

噜噜哒

commons-lang&nbsp;ClassUtils有相关的方法。新版本有:boolean&nbsp;isPrimitiveOrWrapped&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ClassUtils.isPrimitiveOrWrapper(object.getClass());旧版本有wrapperToPrimitive(clazz)方法,它将返回原始对应关系。boolean&nbsp;isPrimitiveOrWrapped&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;clazz.isPrimitive()&nbsp;||&nbsp;ClassUtils.wrapperToPrimitive(clazz)&nbsp;!=&nbsp;null;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java