Spring 工具类之基本元素判断

Spring 工具类之基本元素判断

实际业务开发中偶尔会遇到判断一个对象是否为基本数据类型,除了我们自老老实实的自己写之外,也可以借助 Spring 的 BeanUtils 工具类来实现

// Java基本数据类型及包装类型判断
org.springframework.util.ClassUtils#isPrimitiveOrWrapper

// 扩展的基本类型判断
org.springframework.beans.BeanUtils#isSimpleProperty

这两个工具类的实现都比较清晰,源码看一下,可能比我们自己实现要优雅很多

基本类型判定:ClassUtils

public static boolean isPrimitiveOrWrapper(Class<?> clazz) {
	Assert.notNull(clazz, "Class must not be null");
	return (clazz.isPrimitive() || isPrimitiveWrapper(clazz));
}

注意:非包装类型,直接使用class.isPrimitive() 原生的 jdk 方法即可

包装类型,则实现使用 Map 来初始化判定


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. 其他

1. 一灰灰 Blog: https://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激

欢迎关注微信公众号,大量技术干活分享

  • 一灰灰blog
  • 一灰灰blog
  • 一灰灰blog
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一灰灰blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值