Java isAssignableFrom()方法与instanceof()方法区别
Posted 阿啄debugIT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java isAssignableFrom()方法与instanceof()方法区别相关的知识,希望对你有一定的参考价值。
isAssignableFrom
用来判断一个类Class1是否与另一个类Class2相同,或者Class1是否是Class2的超类或接口;
格式是:
Class1.isAssignableFrom(Class2);
第一个参数是类对象,第二个参数也是类对象;
如何调用呢,例子如下:
Class parent = java.io.InputStream.class;
Class child = java.io.FileInputStream.class;
System.out.println(parent.isAssignableFrom(child));
System.out.println(child.isAssignableFrom(parent));
输出结果是:
true
false
public class AssignableTest
/**
* isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断。
* isAssignableFrom()方法是判断是否为某个类的父类,instanceof()方法是判断是否某个类的子类。
*/
public static void main(String[] args)
//isAssignableFromTest();
isInstanceofTest();
static void isInstanceofTest()
String strValue = "abc";
Object object = new Object();
System.out.println(strValue instanceof Object); // true
System.out.println(object instanceof Object); // true
static void isAssignableFromTest()
List<Object> srcValue = new ArrayList();
Set<Object> srcValue2 = new HashSet<>();
System.out.println("Collection是List的父类:" + Collection.class.isAssignableFrom(srcValue.getClass()));// Collection是List的父类:true
System.out.println("List与List相同:" + List.class.isAssignableFrom(srcValue.getClass())); // List与List相同:true
System.out.println("Collection是Set的父类:" + Collection.class.isAssignableFrom(srcValue2.getClass())); // Collection是Set的父类:true
System.out.println("List是Set的父类:" + List.class.isAssignableFrom(srcValue2.getClass())); // List是Set的父类:false
instanceof
用来判断一个对象实例obj是否是另一个类或接口的实例;
格式是:
obj instanceof ClassName
第一个参数是实例对象,第二个参数是类名;
总结
由此可以知道,
instanceof是子->父的过程;
isAssignableFrom是父->子的过程。
以上是关于Java isAssignableFrom()方法与instanceof()方法区别的主要内容,如果未能解决你的问题,请参考以下文章
Java isAssignableFrom()方法与instanceof()方法区别
Java isAssignableFrom()方法与instanceof()方法区别