【问题标题】:What can I compare an object with using instanceof operator? [duplicate]我可以将对象与使用 instanceof 运算符进行比较吗? [复制]
【发布时间】:2016-10-16 08:48:30
【问题描述】:
class A{}
A a = new A();
Class a1 = A.class;

System.out.println(a instanceof A);   //true
System.out.println(a1.isInstance(a)); //true
System.out.println(a instanceof a1);  //compile error

Class.isInstance 是 Java 语言 instanceof 运算符的动态等效项。所以我认为“A”是“类”对象,但为什么编译错误?而“instanceof”权限的对象是什么类型的呢?

【问题讨论】:

  • 也许是关于“可靠类型”的东西? JLS 15.20.2

标签: java instanceof


【解决方案1】:

分类它的类型,而不是实例。

System.out.println(a instanceOf a1);  //compile error

这一行就像“这个对象类型是对象的类型” 这没有意义。 a 是类型“CLASS”的对象 a1 是类型“A”的对象

【讨论】:

    【解决方案2】:

    请参阅规范中的instanceof

    System.out.println(a instanceOf A);   //true
    

    不,这是语法错误。 instanceof 没有大写字母 O。但是a instanceof Atrue,是的。

    System.out.println(a instanceOf a1);  //compile error
    

    同样,instanceof 有一个小写字母 o。但是,是的,这将是一个编译错误,因为您正在检查 aA.class,而不是 A

    instanceof 右侧的操作数必须是引用类型的名称,而不是 Class 类的实例。 A 是引用类型的名称。 A.classClass 类的一个实例。

    【讨论】:

      【解决方案3】:

      说明

      因为使用instanceof,您应该提供类名,而不是代表此类信息的对象(即不是类Class 的对象)。 isInstance 使用 Class-objectinstanceof - name 类。

      示例

      System.out.println(a instanceof A);   //<object> instanceof <class name>
      System.out.println(a1.isInstance(a)); //<Class object>.isInstance(<object>)
      System.out.println(a instanceof a1);  //error: <object> instanceof <Class object>
      System.out.println(A.isInstance(a));  //error: <class name>.isInstance(<object>)
      

      【讨论】:

        猜你喜欢
        • 2018-02-04
        • 1970-01-01
        • 2017-11-08
        • 2011-10-21
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        相关资源
        最近更新 更多