实战小技巧15:如何判断类为基础类型or基础类型的包装类

简介: 判断一个类是否为基础类型属于常规操作了,一般我们遇到这种case,要怎么处理呢?一个一个的if/else判断? 还是其他的操作姿势?

判断一个类是否为基础类型属于常规操作了,一般我们遇到这种case,要怎么处理呢?

一个一个的if/else判断? 还是其他的操作姿势?


1. 基础类型判断



基础类型可以借助class类的isPrimitive方法来实现判定,使用姿势也简单


obj.getClass().isPrimitive()
复制代码


如果返回true,那么这个对象就是基本类型


  • boolean
  • char
  • byte
  • short
  • int
  • long
  • float
  • double
  • void


但是请注意,对于封装类型,比如Long,访问isPrimitive返回的是false


2. 封装类型判断



那么封装类型可以怎么判断呢?难道一个一个的判定不成?


首先我们注意到Class#isPrimitive的方法签名,如下

/**
 * @see     java.lang.Boolean#TYPE
 * @see     java.lang.Character#TYPE
 * @see     java.lang.Byte#TYPE
 * @see     java.lang.Short#TYPE
 * @see     java.lang.Integer#TYPE
 * @see     java.lang.Long#TYPE
 * @see     java.lang.Float#TYPE
 * @see     java.lang.Double#TYPE
 * @see     java.lang.Void#TYPE
 * @since JDK1.1
 */
public native boolean isPrimitive();
复制代码


上面的注释中,提到了Boolean#Type之类的静态成员,也就是说包装类型,都有一个TYPE的静态成员


比如boolean的是这个

@SuppressWarnings("unchecked")
public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");
复制代码


所以我们可以通过这个TYPE来判定,当前对象是否为封装对象

try {
    return ((Class) clz.getField("TYPE").get(null)).isPrimitive();
} catch (Exception e) {
    return false;
}
复制代码


如果Class对象没有TYPE字段,那么就不是封装类,直接抛异常,返回false;当然这种通过异常的方式来判定,并不优雅;但是写法上比我们一个一个的if/else进行对比,要好得多了



相关文章
|
1月前
|
缓存 Java 编译器
34、Java 中有了基本数据类型,为什么还需要有包装类型?包装类型是啥?
34、Java 中有了基本数据类型,为什么还需要有包装类型?包装类型是啥?
53 1
|
9天前
|
C语言 C++
C++对C的改进和拓展\string类型
C++对C的改进和拓展\string类型
8 1
|
1月前
|
存储 测试技术 C++
03 # 类型基础:动态类型与静态类型
03 # 类型基础:动态类型与静态类型
32 0
|
6月前
转成String类型的几种方式
转成String类型的几种方式
57 0
|
10月前
|
Java
Java 中String类型变量的使用
Java 中String类型变量的使用
57 0
|
JavaScript 前端开发
学习TypeScrip1(基础类型)
void 类型的用法,主要是用在我们不希望调用者关心函数返回值的情况下,比如通常的异步回调函数
64 0
学习TypeScrip1(基础类型)
|
存储 缓存 安全
|
缓存 Java 编译器
第34篇 :Java 中有了基本数据类型,为什么还需要有包装类型?包装类型是啥?
整数类型(Byte、Short、Integer、Long) 的包装类的valueOf方法的底层会有缓存的操作(缓存常用的数字的包装类型)
217 0
第34篇 :Java 中有了基本数据类型,为什么还需要有包装类型?包装类型是啥?
|
Go 开发者
字符串类型细节说明|学习笔记
快速学习字符串类型细节说明。
97 0
面试题——包装类型
面试题——包装类型
86 0
面试题——包装类型