给定Class<?> superType
和Object subInstance
,
superType.isInstance(subInstance)
和
superType.isAssignableFrom(subInstance.getClass())
(如果有的话)?
答案 0 :(得分:2)
在场景中,没有区别。
两种方法之间的区别在于参数。一个用于对象,一个用于类:
确定指定的Object是否与赋值兼容 与此类所代表的对象。
确定由此表示的类或接口 类对象可以是相同的,也可以是超类或 由指定表示的类或接口的超接口 类参数。
答案 1 :(得分:2)
isAssignableFrom
还会测试是否可以通过标识转换或扩展引用转换来转换类型。
Class<?> cInt = Integer.TYPE;
Long l = new Long(123);
System.out.println(cInt.isInstance(l)); // false
System.out.println(cInt.isAssignableFrom(cInt)); // true
答案 2 :(得分:0)
isAssignableFrom()
的超类或超接口, subInstance.getClass()
就为真
只要对象isInstance()
是subInstance
的实例,
superType
就会为真。
所以基本的区别在于isInstance
适用于实例isAssignableFrom
适用于类。
如果我没有实例/由于某种原因不想实例化类,我经常使用isAssignableFrom
。否则你可以同时使用它们。
答案 3 :(得分:0)
来自Java API:
isInstance(Object obj)
Determines if the specified Object is assignment-compatible with the object represented by this Class.
isAssignableFrom(Class<?> cls)
Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.
所以听起来两个方法做的事情非常类似,但是一个人需要Object
并查看该对象的Class
,而另一个则需要Class
。< / p>