类型信息之instanceof、isInstance与isAssignableFrom

来源:互联网 发布:erp是什么软件 编辑:程序博客网 时间:2024/06/05 16:25

Java中RTTI部分判断对象是不是某个特定类型的实例的方式包括instanceof、isInstance与isAssignableFrom。

查看JDK API文档可知:
instanceof是一个二元操作符:
boolean result = object instanceof class
判定object 是不是class或其子类的实例对象。

isInstance(Object obj) 是动态的instanceof:
判定指定的 Object 是否与此 Class 所表示的对象赋值兼容,返回一个boolean值。

isAssignableFrom(Class<?> cls)
判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。

class A{}class AA extends A{}public class Test{    static void print(Boolean b){        System.out.println(b);    }public static void main(String[] args){        A a= new A();        AA aa=new AA();        print(a instanceof A);        print(a instanceof AA);        print(aa instanceof A);        print(aa instanceof AA);        System.out.println();        print(A.class.isInstance(a));        print(A.class.isInstance(aa));        print(AA.class.isInstance(a));          print(AA.class.isInstance(aa));        System.out.println();        print(A.class.isAssignableFrom(A.class));        print(A.class.isAssignableFrom(AA.class));        print(AA.class.isAssignableFrom(A.class));        print(A.class.isAssignableFrom(AA.class));      }}

输出:
instanceof:
true
false
true
true

isInstance:
true
true
false
true

isAssignableFrom:
true
true
false
true

总结
object instanceof class:判定object 对象是否属于class类或其子类,这里class是类名;

Class.isInstance(Object obj):与instanceof等价,判定object 对象是否属于Class类或其子类,这里Class不是类名,是Class对象的引用(如:A.class);

Class.isAssignableFrom(Class<?> cls):判定Class cls(参数)是否是Class类(左)或其子类,这里均为Class对象的引用。

0 0
原创粉丝点击