Question

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()));
    }
}

Output:

false

Why is it false? Both A.class and a.getClass() should not return the same class!

And in which condition we will get true from the isInstance() method?

Was it helpful?

Solution

Because a.getClass() returns Class<A>, but you should pass in an A:

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

If you have two Class instances and want to check for assignment compatibility, then you need to use isAssignableFrom():

System.out.println(A.class.isAssignableFrom(Object.class)); // false
System.out.println(Object.class.isAssignableFrom(A.class)); // true

OTHER TIPS

Because what a.getClass() returns has type Class<? extends A>, not A.

What A.class.isInstance tests is whether the passed object has type A.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top