instanceof vs isInstance()
-
13-06-2021 - |
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?
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