实战小技巧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进行对比,要好得多了



相关文章
|
8月前
|
存储 Java 数据库
java包装类的作用、基本类型和包装类型的区别
java包装类的作用、基本类型和包装类型的区别
112 0
java包装类的作用、基本类型和包装类型的区别
|
4月前
|
存储 缓存 Java
包装类型16
包装类型16
44 3
|
4月前
|
存储 编译器 开发者
通过 cdef 进行静态类型声明
通过 cdef 进行静态类型声明
44 0
|
7月前
|
C语言 C++
C++对C的改进和拓展\string类型
C++对C的改进和拓展\string类型
39 1
|
8月前
|
存储 测试技术 C++
03 # 类型基础:动态类型与静态类型
03 # 类型基础:动态类型与静态类型
69 0
|
JavaScript 前端开发
学习TypeScrip1(基础类型)
void 类型的用法,主要是用在我们不希望调用者关心函数返回值的情况下,比如通常的异步回调函数
97 0
学习TypeScrip1(基础类型)
|
存储 缓存 安全
|
存储 编译器 C语言
关于静态类型、动态类型、id、instancetype
在实际开发与学习中,特别常见的概念:静态类型、动态类型、id、instancetype。了解这些概念,存储在实际编码中非常有用。
247 0
面试题——包装类型
面试题——包装类型
108 0
面试题——包装类型