繁体   English   中英

为什么ReflectionChild.class.isInstance(Class.class)不正确?

[英]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.classClass的实例,而不是ReflectionChild
因此, isInstance()返回false。

因为Class实例不是类型为ReflectionChild的实例。

javadoc

具体来说,如果此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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM