0

可能重复:
instanceof - 不兼容的条件操作数类型

我正在测试 JAVA “instance of”运算符,以刷新我的想法。我看到该关键字用于检查引用是否是类的实例。

但是我们使用引用来与与该类没有任何 IS-A 关系的类进行比较,然后它会给出编译时错误。

请参阅以下代码:

package instanceofdemo;
public class Sample_1 {

    public static void main(String a[]){
        A iface = new Subclass();

        ///HERE INTERFACE OBJECT IS DOWNCASTED TO SUBCLASS
        if(iface instanceof  SuperClass){
            System.out.println("iface instanceof  SuperClass");
        }

        ///HERE INTERFACE OBJECT IS DOWNCASTED TO SUBCLASS
        if(iface instanceof  Subclass){
            System.out.println("iface instanceof  Subclass");
        }

        if(iface instanceof  A){
            System.out.println("iface instanceof  A");
        }


        Subclass sub = new Subclass();

        //SO INSTANCE OF ONLY WORKS WITH IS-A RELATION SHIP IN BI-DIRECTIONAL WAY
        //IT WILL GIVE COMPILE TIME ERROR, IF YOU TRY TO USE INSTANCE-OF WITH NON-RELATED CLASS
        if(sub instanceof  Independent){

        }

    }

}

interface  A{

}


class SuperClass implements A {

}



class Subclass extends  SuperClass{

}

class Independent{

}

在上面的代码中:当它在if(iface instance of Independent)bcoz 行给出编译错误时,iface 与 Independent 没有“IS-A”关系。

那么关键字实例的确切用途是什么?如果它仅与“IS-A”关系一起使用,那么......如果条件为假的变化在哪里?

4

1 回答 1

3

这是一个功能,而不是一个错误。编译器会阻止您instanceof在基本上不可能遇到的情况下使用运算符,例如:

String s = "abc";
if(s instanceof Integer) {
}

s instanceof Integer永远不可能是真的。但是检查是在编译时执行的,所以编译:

Object s = "abc";
if(s instanceof Integer) {
}
于 2012-05-17T07:52:24.543 回答