5
class A{

    public A(){
        System.out.println("in A");
    }
}

public class SampleClass{

    public static void main(String[] args) {
        A a = new A();

        System.out.println(A.class.isInstance(a.getClass()));
    }
}

输出:

false

为什么是假的?两者都不应该返回同一个类A.classa.getClass()

在哪种情况下,我们将从该isInstance()方法中得到正确的结果?

4

2 回答 2

13

因为a.getClass()返回Class<A>,但你应该传入一个A

System.out.println(A.class.isInstance(a));

如果您有两个Class实例并且想要检查分配兼容性,那么您需要使用isAssignableFrom()

System.out.println(A.class.isAssignableFrom(Object.class)); // false
System.out.println(Object.class.isAssignableFrom(A.class)); // true
于 2012-06-08T07:08:51.820 回答
3

因为a.getClass()返回的是类型Class<? extends A>,而不是类型A

测试的是A.class.isInstance传递的对象是否具有 type A

于 2012-06-08T07:08:59.310 回答