1. 前言

在Java这种强类型语言中类型转换、类型判断是经常遇到的。今天就细数一下Java中类型判断的方法方式。

2. instanceof

instanceof是Java的一个运算符,用来判断一个对象是否为一个类的实例 。用法:

boolean isInstance = obj instanceof Class

其中 obj 为一个对象实例,Class 为类名或者一个接口名,当 obj 为 Class 的实例,或是其子类实例,或是其接口的实现类实例,都返回 true,否则返回false。

需要注意的是obj 必须为引用类型,不能是基本类型,下面的式子是无法编译的:

int integer = 0;

// 编译时会报错

boolean isInstance = integer instanceof Number

此外编译器会检查instanceof表达式中的 obj 能否能转换成右边的Class类型,如果无法转换则会直接报错,如果不能确定类型,也会通过编译。

3. Class.isInstance

// Class.isInstance 等效于instanceof 操作符

boolean ret = entity instanceof UserInfo;

boolean isInstance = UserInfo.class.isInstance(entity);

如上所示Class.isInstance 等效于instanceof 操作符。该方法是在Java 1.1中引入的,因为它可以动态地使用。如果参数不为null,并且可以在不引发ClassCastException的情况下成功将其强制转换为左边的引用类型时将返回true。

4. Class.isAssignableFrom

该方法的调用者和参数都是Class对象,调用者为父类,参数为本身或者其子类。

boolean assignableFrom = List.class.isAssignableFrom(ArrayList.class);

经常用来判断父子继承关系,我在Mybatis插件教程一文中就用到了该方法来判断某个类是不是某个接口的实现类。

5. Class.isPrimitive

此方法主要用来判断Class是否为原始类型(boolean、char、byte、short、int、long、float、double)。

//true

boolean primitive = int.class.isPrimitive();

它是来解决我们在本文章节2中提到的基础类型判断的问题。但是它只能判断某类型是不是基础类型,并不是具体到某个类型的。

但是请注意,基础类型的包装类型用此方法判断结果会返回false。

6. 总结

这些类型判断除了前两种比较常见,后面的两种用到的机会还是有限的。不知道你用过这里面的哪几种?欢迎留言讨论。我是:码农小胖哥,多多关注,更多知识分享。

关注公众号:Felordcn 获取更多资讯

个人博客:https://felord.cn

java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园相关推荐

  1. java多线程区别_Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  2. java 时间戳 对比_Java中获取时间戳的三种方式对比实现

    Java中获取时间戳 三种方式对比 最近项目开发过程中发现了项目中获取时间戳的业务.而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式. 1.System ...

  3. java 常量定义_Java中常量定义的几种方式

    编程中使用常量的优点: 常量提取出来有利于代码阅读,而且下次再做这种判断不用手写或复制并且提高代码的复用率,方便修改,直接通过常量类就能得到.不过我觉得提取出来并不会有利于代码性能提升,因为常量分配在 ...

  4. java简单多线程_java中实现多线程的几种方式(简单实现)

    一.以下只是简单的实现多线程 1:继承Thread 2:实现 Runnable 3:实现callable 如果需要返回值使用callable,如果不需要返回最好使用runnable,因为继承只能单继承 ...

  5. c 语言 json序列化,C#中json字符串的序列化和反序列化 – 万能的聪哥 – 博客园...

    今日写番茄闹钟程序,打算添加日程安排内容,使用到json格式文件的序列化和反序列化: 什么是Json ? Json[ 它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它, 并且它很容易被计算机 ...

  6. java判断类型_Java中类型判断的几种方式

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  7. Django中的Model(字段) - 第五轻柔的code - 博客园

    Django中的Model(字段) - 第五轻柔的code - 博客园 Django ORM 中的批量操作 - AlphaJx - 博客园

  8. Django中的Model(操作表) - 第五轻柔的code - 博客园

    Django中的Model(操作表) - 第五轻柔的code - 博客园

  9. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

最新文章

  1. Activity Stack
  2. (0029) iOS 开发之API HTTP 请求调试网站
  3. 大连网络推广浅析网站如何实现加快收录的方法?
  4. 向Lucene增加中文分词功能
  5. lnmp中怎么运行ngin和mysql_安装LNMP(Nginx+Mysql+PHP)
  6. 动态规划总结与题目分类
  7. C++ sprintf 函数的使用
  8. WordPress让文本小工具支持简码
  9. netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源
  10. 32岁妈妈适合转行做软件测试吗,32+大龄妈妈,AMH偏低,可丽蓝助力好孕一次就中...
  11. 涉及反射/内省/泛型的优化实践
  12. Maven 创建、测试工程
  13. flex builder method
  14. WIN32_FIND_DATA
  15. Tile:一个崭新出炉的机器学习语言
  16. python算法-冒泡排序
  17. 使用pytorch自己从头搭建一个Lenet分类器网络及其训练、检测脚本
  18. Windows CMD常用命令大全
  19. 爬虫案例—京东数据爬取、数据处理及数据可视化(效果+代码)
  20. 6款炫酷的HTML5 3D特效源码

热门文章

  1. 深入Go的底层,带你走近一群有追求的人
  2. 如何给小白解释什么是编解码器
  3. 姜健:为开源工作幸福且自豪
  4. WebRTC通话原理
  5. ffmpeg内存模型及AVPacket和AVFrame API基本使用
  6. centos7.2源码安装openssl1.0.2
  7. ssh 远程登录不用密码 ssh-keygen -t rsa
  8. 判空前后顺序的思考(代码规范)
  9. leetcode 668. Kth Smallest Number in Multiplication Table | 668. 乘法表中第k小的数(二分查找)
  10. leetcode 416. Partition Equal Subset Sum | 416. 分割等和子集(Java)