的instanceof VS isInstance()(instanceof vs isInstan

2019-09-17 21:52发布

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()方法?

Answer 1:

由于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


Answer 2:

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

什么A.class.isInstance测试是传递的对象是否具有类型A



文章来源: instanceof vs isInstance()