instanceof,isInstance,isAssignableFrom的区别,以及isAssignableFrom()详解
2012-09-17 20:14
477 查看
一:isAssignableFrom详解,这个方法我觉得是不好理解,感觉命名不对劲,不知道是不是错觉
Class类的isAssignableFrom(Class cls)方法,如果调用这个方法的class或接口 与 参数cls表示的类或接口相同,或者是参数cls表示的类或接口的父类,则返回true。
形象地:自身类.class.isAssignableFrom(自身类或子类.class) 返回true
例如:
二:instanceof,inInstance,isAssignableFrom方法的区别:
测试程序:
输出结果:
可以看出,instanceof和isInstance这两个方法基本上是等价的,都可以判定类或者子类的实例是否是属于某个类,偏向于向上比较(父类);而isAssignableFrom则偏向于向下比较(子类),而且isAssignableFrom比较的不是实例,而是类本身的层次结构,倾向于类本身,而不是实例;如:Object.class.isAssignableFrom(File.class)//true;另外2个方法则倾向于比较实例
Class类的isAssignableFrom(Class cls)方法,如果调用这个方法的class或接口 与 参数cls表示的类或接口相同,或者是参数cls表示的类或接口的父类,则返回true。
形象地:自身类.class.isAssignableFrom(自身类或子类.class) 返回true
例如:
Object parent = new Object(); File child = new File("."); parent.getClass().isAssignableFrom(child.getClass());//true
二:instanceof,inInstance,isAssignableFrom方法的区别:
测试程序:
package com.zizhu.rtti; public class Test { /** * @param args */ public static void main(String[] args) { //测试instanceof , isInstance,isAssignFrom Super s = new Super(); Base b = new Base(); Deprive d = new Deprive(); test(s); test(b); test(d); } public static void test(Object x){ System.out.println("--------------------------------"); System.out.println("class : " + x.getClass().getName()); System.out.println("x instanceof Super : " + (x instanceof Super)); System.out.println("Super.isInstance(x) : " + (Super.class.isInstance(x))); System.out.println("x.class.isAssignableFrom(Super) : " + (x.getClass().isAssignableFrom(Super.class))); System.out.println("x instanceof Base : " + (x instanceof Base)); System.out.println("Base.isInstance(x) : " + (Base.class.isInstance(x))); System.out.println("x.class.isAssignableFrom(Base) : " + (x.getClass().isAssignableFrom(Base.class))); System.out.println("x instanceof Deprive : " + (x instanceof Deprive)); System.out.println("Deprive.isInstance(x) : " + (Deprive.class.isInstance(x))); System.out.println("x.class.isAssignableFrom(Deprive) : " + (x.getClass().isAssignableFrom(Deprive.class))); } }
输出结果:
-------------------------------- class : com.zizhu.rtti.Super x instanceof Super : true Super.isInstance(x) : true x.class.isAssignableFrom(Super) : true x instanceof Base : false Base.isInstance(x) : false x.class.isAssignableFrom(Base) : true x instanceof Deprive : false Deprive.isInstance(x) : false x.isAssignableFrom(Deprive) : true -------------------------------- class : com.zizhu.rtti.Base x instanceof Super : true Super.isInstance(x) : true x.class.isAssignableFrom(Super) : false x instanceof Base : true Base.isInstance(x) : true x.class.isAssignableFrom(Base) : true x instanceof Deprive : false Deprive.isInstance(x) : false x.isAssignableFrom(Deprive) : true -------------------------------- class : com.zizhu.rtti.Deprive x instanceof Super : true Super.isInstance(x) : true x.class.isAssignableFrom(Super) : false x instanceof Base : true Base.isInstance(x) : true x.class.isAssignableFrom(Base) : false x instanceof Deprive : true Deprive.isInstance(x) : true x.isAssignableFrom(Deprive) : true
可以看出,instanceof和isInstance这两个方法基本上是等价的,都可以判定类或者子类的实例是否是属于某个类,偏向于向上比较(父类);而isAssignableFrom则偏向于向下比较(子类),而且isAssignableFrom比较的不是实例,而是类本身的层次结构,倾向于类本身,而不是实例;如:Object.class.isAssignableFrom(File.class)//true;另外2个方法则倾向于比较实例
相关文章推荐
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof和isInstance(Object obj)和isAssignableFrom(Class cls)的区别和联系
- Class.isAssignableFrom(Class clz)与instanceof与Class.isInstance(Object obj) 的区别和联系
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof运算符、Class的isInstance( )与isAssignableFrom之间的区别
- instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系
- instanceof, isinstance,isAssignableFrom的区别
- instanceof运算符、Class的isInstance( )与isAssignableFrom之间的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别
- instanceof, isinstance,isAssignableFrom的区别