问题
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?
回答1:
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
回答2:
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
.
来源:https://stackoverflow.com/questions/10944448/instanceof-vs-isinstance