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.class
和a.getClass()
都不应该返回同一个类!
在哪种情况下,我们会从isInstance()
方法中获得真实效果?
答案 0 :(得分:13)
由于a.getClass()
返回Class<A>
,但you should pass in an 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
答案 1 :(得分:3)
因为a.getClass()
返回的内容类型为Class<? extends A>
,而非A
。
A.class.isInstance
测试是传递的对象是否具有类型A
。