Java对象类型的判断详解
时间:2020-11-20 17:23:18|栏目:JAVA代码|点击: 次
instanceof
判断某个对象是否是某个类的实例或者某个类的子类的实例。它的判断方式大概是这样的:
public<T> boolean function(Object obj, Class<T> calzz) { if (obj == null) { return false; } try { T t = (T) obj; return true; } catch (ClassCastException e) { return false; } }
Class.equals()
这种方式比较的类型,一定是本身才返回true,子类或者父类都返回false;
// B是A的子类,C是B的子类 B b = new B(); // false System.out.println(b.getClass().equals(A.class)); // true System.out.println(b.getClass().equals(B.class)); // false System.out.println(b.getClass().equals(C.class));
PS:b.getClass().equals(A.class)等同于b.getClass() == A.class
Class.isInstance()
这个方法跟instanceof完全等价。
// B是A的子类,C是B的子类 B b = new B(); // true System.out.println(A.class.isInstance(b)); // true System.out.println(B.class.isInstance(b)); // false System.out.println(C.class.isInstance(b));
Class.isAssignableFrom
判断某个类是否是另一个类和其子类。
// B是A的子类,C是B的子类 // false System.out.println(B.class.isAssignableFrom(A.class)); // true System.out.println(B.class.isAssignableFrom(B.class)); // true System.out.println(B.class.isAssignableFrom(C.class));
阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机