[英]Why ReflectionChild.class.isInstance(Class.class) is not true?
为什么ReflectionChild.class.isInstance(Class.class)不正确?
众所周知,Class.class.isInstance(Class.class)是真实的。 现在,请参见下面的代码片段。
ReflectionChild ch = new ReflectionChild(); //Take random class
if(ch.getClass()==ReflectionChild.class){
System.out.println("ch.getClass()==ReflectionChild.class");
}
System.out.println(ReflectionChild.class.getClass());
System.out.println(Class.class);
if(ReflectionChild.class.getClass()==Class.class){
System.out.println("ReflectionChild.class.getClass()==Class.class");
//System.exit(0);
}
if(ReflectionChild.class.isInstance(Class.class)){
System.out.println("true");
//System.exit(0);
}else{
System.out.println("false");
}
输出为:-
ch.getClass()==ReflectionChild.class // 1st SYSOUT
class java.lang.Class // 2nd SYSOUT
class java.lang.Class // 3rd SYSOUT
ReflectionChild.class.getClass()==Class.class //4th SYSOUT
false // 5th SYSOUT
根据以上第四个SYSOUT的行, ReflectionChild.class.isInstance(Class.class)
应为true。 但是对我来说,输出是错误的。
有人可以解释吗?
Class.class
是Class
的实例,而不是ReflectionChild
。
因此, isInstance()
返回false。
因为Class
实例不是类型为ReflectionChild
的实例。
具体来说,如果此
Class
对象表示一个声明的类,则如果指定的Object
参数是所表示的类(或其任何子类)的实例,则此方法返回true
否则,此方法返回true
。 否则返回false
。
您提供的参数的类型为Class
,它不是由类文字表达式ReflectionChild.class
返回的Class
实例表示的ReflectionChild
类型的实例。
从Class#isInstance(Object)
的Javadocs中:
确定指定的
Object
是否与此Class
表示的对象赋值兼容。 此方法与Java语言instanceof运算符动态等效。 如果指定的Object参数为非null,并且可以将其强制转换为由此Class
对象表示的引用类型,而不会引发ClassCastException
则该方法返回true。 否则返回false。
因此,作为参数传递给该方法的对象必须是该方法所调用的对象所代表的类的实例, 而不是相反 :应返回true
的表达式如下:
if(Class.class.isInstance(ReflectionChild.class)){
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.