实际业务开发中偶尔会遇到判断一个对象是否为基本数据类型,除了我们自老老实实的自己写之外,也可以借助Spring的 BeanUtils 工具类来实现
1 2 3 4 5 org.springframework.util.ClassUtils#isPrimitiveOrWrapper org.springframework.beans.BeanUtils#isSimpleProperty
这两个工具类的实现都比较清晰,源码看一下,可能比我们自己实现要优雅很多
基本类型判定:ClassUtils
1 2 3 4 public static boolean isPrimitiveOrWrapper (Class<?> clazz) { Assert.notNull(clazz, "Class must not be null" ); return (clazz.isPrimitive() || isPrimitiveWrapper(clazz)); }
注意:非包装类型,直接使用class.isPrimitive()
原生的jdk方法即可
包装类型,则实现使用Map来初始化判定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 private static final Map<Class<?>, Class<?>> primitiveWrapperTypeMap = new IdentityHashMap<>(8 );static { primitiveWrapperTypeMap.put(Boolean.class , boolean .class ) ; primitiveWrapperTypeMap.put(Byte.class , byte .class ) ; primitiveWrapperTypeMap.put(Character.class , char .class ) ; primitiveWrapperTypeMap.put(Double.class , double .class ) ; primitiveWrapperTypeMap.put(Float.class , float .class ) ; primitiveWrapperTypeMap.put(Integer.class , int .class ) ; primitiveWrapperTypeMap.put(Long.class , long .class ) ; primitiveWrapperTypeMap.put(Short.class , short .class ) ; primitiveWrapperTypeMap.put(Void.class , void .class ) ; } public static boolean isPrimitiveWrapper (Class<?> clazz) { Assert.notNull(clazz, "Class must not be null" ); return primitiveWrapperTypeMap.containsKey(clazz); }
这里非常有意思的一个点是这个Map容器选择了IdentityHashMap
,这个又是什么东西呢?
下篇博文仔细撸一下它
II. 其他 一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明 尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
3. 扫描关注 一灰灰blog