1,isAssignableFrom():是字节码对象的方法

是用来判断一个类的字节码对象和另一个类的字节码对象是否相同或是子类或接口。
assignable英 [ə,sainəbl]美 [ə,sainəbl]
adj. [经] 可分配的;可指定的;可让渡的
更多释义>>
[网络短语]
assignable 可转让信用证,可转让的,可指定的
assignable assets 可确指的资产
assignable document 可转让单据

格式为:(xxx是否可从xxx转换)

Class1.isAssignableFrom(Class2)
调用者和参数都是java.lang.Class类型的对象。
 /**
* 判断一个类是否是另一个类的父类
* 是false
*/
public static void testIsAssignedFrom1() {
System.out.println("String是Object的父类:"+String.class.isAssignableFrom(Object.class));
}
/**
* 判断一个类是否是另一个类的父类
* 是true
*/
public static void testIsAssignedFrom2() {
System.out.println("Object是String的父类:"+Object.class.isAssignableFrom(String.class));
}
/**
* 判断一个类是否和另一个类相同
* 是true
*/
public static void testIsAssignedFrom3() {
System.out.println("Object和Object相同:"+Object.class.isAssignableFrom(Object.class));
}

2,instanceof :是关键词

是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。 

如果被测对象是null值,则测试结果总是false。

格式是:

o instanceof TypeName
第一个参数是对象实例名,第二个参数是类名或接口名,例如:String/InputStream。
     /**
* 判断str是否是Object类的实例
* 是true
*/
public static void testInstanceOf1() {
String str = new String();
System.out.print("str是Object的实例:");
System.out.println(str instanceof Object);
}
/**
* 判断o是否是Object类的实例
* 是true
*/
public static void testInstanceOf2() {
Object o = new Object();
System.out.print("o是Object的实例:");
System.out.println(o instanceof Object);
}

3,isinstance:字节码对象的方法

这个方法是instanceof运算符的动态等价。
自身类.class.isInstance(自身实例或子类的实例) 返回true

例子:

String s=new String("javaisland");
System.out.println(String.class.isInstance(s)); //true

4,asSubclass:是字节码对象的方法

asSubclass用于窄化未知的Class类型的范围(得到一个特定类型字节码对象。)

是java.lang.Class中的一个方法,作用是将class对象(字节码对象)转换成由clazz参数所表示的class对象(字节码对象)的某个子类。

public <U> Class<? extends U> asSubclass(Class<U> clazz) 

例子:

List<String> strList = new ArrayList<String>();
Class<? extends List> strList_cast = strList.getClass().asSubclass(List.class);

这么做似乎没有什么意义,因为我们很清楚strList.getClass()获取的class对象就是ArrayList,它当然是List.class的一个子类;

但有些情况下,我们并不能确知一个class对象的类型,典型的情况是Class.forName()获取的class对象:class.forName()的返回类型是Class<>,但这显然太宽泛了,

假设我们需要List.class类型的class对象,这时我们就可以用到asSubclass()这个方法了,如下:

Class.forName("xxx.xxx.xxx").asSubclass(List.class).newInstance();  

当xxx.xxx.xxx是List的子类时,正常执行,当不是List的子类时,抛出ClassCastException。asSubclass()在JDK中广泛使用。

instanceof,isinstance,isAssignableFrom,asSubclass的区别的更多相关文章

  1. instanceof, isinstance,isAssignableFrom的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...

  2. instanceof isInstance isAssignableFrom 比较

    instanceof  :  java 的关键字 判断一个 实例对象 是不是 可以赋值 给一个 class(  实例对象是不是 class 或者 subClass 的实现 ),表示的类和对象之间的关系 ...

  3. day25——私有成员、类方法、静态方法、属性、isinstance和issubclass的区别

    day25 类的私有成员 当你遇到重要的数据,功能(只允许本类使用的一些方法,数据)设置成私有成员 python所有的私有成员都是纸老虎,形同虚设 类从加载时,只要遇到类中的私有成员,都会在私有成员前 ...

  4. Class.isAssignableFrom(Class clz)与instanceof与Class.isInstance(Object obj) 的区别和联系

    编程的时候可能会遇到一个不知道它属于哪个类的对象,我们可以用下列运算符或者方法来判断.  1.instanceof instanceof是运算符只被用于对象引用变量,检查左边的被测试对象是不是右边类或 ...

  5. instanceof运算符、Class的isInstance( )与isAssignableFrom之间的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false.形象地:自身实例或子类实例 instance ...

  6. 判断一个类是否为另一个类的实例 instanceof关键字和isAssignableFrom方法的区别

    Which of the following is better? a instanceof B or B.class.isAssignableFrom(a.getClass()) The only ...

  7. instanceOf与isInstance()方法之间的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false.Class类的isInstance(Obje ...

  8. instanceof 与isAssignableFrom

    instanceof 针对实例 isAssignableFrom针对class对象 isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或 ...

  9. isinstance与type的区别

    1.isinstance()内置函数 python中的isinstance()函数是python的内置函数,用来判断一个函数是否是一个已知类型.类似type. 2.用法: isinstance(obj ...

随机推荐

  1. Android开发之获取系统所有进程信息。

    最近在做一个app,有一个进程管理模块用于管理系统中正在运行的进程,并且可以关闭进程进行加速手机的功能,基本把它实现了出来.界面的效果都是自己写的,虽然有BUG,但是基本上能满足需求,后期我会改进BU ...

  2. 01d-1: 算法分析

  3. Inception

    http://baijiahao.baidu.com/s?id=1601882944953788623&wfr=spider&for=pc

  4. Ubuntu使用ttyS*(如mincom)时不需root权限的方法

    很久很久以前,我们在Ubuntu下使用软件(如minicom.screen等)访问串口时,是不需要任何超级权限的(使用minicom时,只有使用-s选项时需要root权限):不知道从哪个版本(12.0 ...

  5. MacOS下打包Python应用

    在MacOS下开发的Python应用,不是Web Application,开发好以后,如何给用户使用呢?用户的操作系统也是MacOS 使用py2app打包        一.软件环境          ...

  6. 企业招聘:UX设计师需要满足他们哪些期望?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   为了确定2017年最有价值的用户体验技能和特质,我特地参考了150多份工作要求.最后,得出了以下 ...

  7. vs2012

    https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=36020

  8. pyspider示例代码三:用PyQuery解析页面数据

    本系列文章主要记录和讲解pyspider的示例代码,希望能抛砖引玉.pyspider示例代码官方网站是http://demo.pyspider.org/.上面的示例代码太多,无从下手.因此本人找出一些 ...

  9. firefox快速刷新error及解决办法

    问题: 测试发过来bug,说——频繁F5刷新页面,会闪现未加载完样式的页面:    开发用的Chrome,没发现这个问题,测试用的firefox,于是从浏览器的刷新加载机制方面搜索解决办法,没搜到,运 ...

  10. Linux服务器上日志报com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1783 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

    在做查询数据库操作时,报了以上错误,还有out of memery heap hacp ,原因是MySQL的max_allowed_packet设置过小引起的,我一开始设置的是1M,后来改为了20M ...