7

给定 aClass<?> superType和 a Object subInstance,它们之间有什么区别

superType.isInstance(subInstance)

superType.isAssignableFrom(subInstance.getClass())

(如果有的话)?

4

4 回答 4

3

在场景中,没有区别。

两种方法的区别在于参数。一种适用于对象,一种适用于类:

类#isInstance(对象)

确定指定的 Object 是否与该 Class 表示的对象赋值兼容。

类#isAssignableFrom(类)

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。

于 2013-10-29T16:39:09.400 回答
3

isAssignableFrom还测试是否可以通过标识转换或通过扩大引用转换来转换类型。

    Class<?> cInt = Integer.TYPE;

    Long l = new Long(123);

    System.out.println(cInt.isInstance(l)); // false
    System.out.println(cInt.isAssignableFrom(cInt)); // true
于 2013-10-29T16:41:34.470 回答
1

isAssignableFrom()只要类对象表示的类是subInstance.getClass()

isInstance()只要对象subInstancesuperType.

所以基本的区别是isInstance与实例isAssignableFrom一起工作与类一起工作。

isAssignableFrom如果我没有实例/出于某种原因不想实例化类,我经常使用。否则,您可以同时使用两者。

于 2013-10-29T16:37:57.847 回答
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.

所以听起来这两种方法做的事情非常相似,但是一种方法接受 aObject并查看Class该对象的 ,而另一种方法接受 a Class

于 2013-10-29T16:40:17.147 回答