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

文章目录
  1. 1. 基础类型判断
  2. 2. 封装类型判断
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 每天一个实战小技巧,判断类为基础类型or基础类型的包装类

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

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

    1. 基础类型判断

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

    1
    obj.getClass().isPrimitive()

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

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

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

    2. 封装类型判断

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
    * @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的是这个

    1
    2
    @SuppressWarnings("unchecked")
    public static final Class<Boolean> TYPE = (Class<Boolean>) Class.getPrimitiveClass("boolean");

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

    1
    2
    3
    4
    5
    try {
    return ((Class) clz.getField("TYPE").get(null)).isPrimitive();
    } catch (Exception e) {
    return false;
    }

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

    系列博文:

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

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

    2. 声明

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

    3. 扫描关注

    一灰灰blog

    QrCode

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

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

    2. 声明

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

    3. 扫描关注

    一灰灰blog

    QrCode

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×