使用带接口的instanceof运算符时出错?

时间:2012-10-25 10:21:09

标签: java interface instanceof

我正在尝试根据链接了解java中的instanceof运算符: - instanceof

但是当我尝试运行以下代码时: -

class InstanceofDemo {
public static void main(String[] args) {

    Parent obj1 = new Parent();
    Parent obj2 = new Child();

    System.out.println("obj1 instanceof Parent: "
        + (obj1 instanceof Parent));
    System.out.println("obj1 instanceof Child: "
        + (obj1 instanceof Child));
    System.out.println("obj1 instanceof MyInterface: "
        + (obj1 instanceof MyInterface));
    System.out.println("obj2 instanceof Parent: "
        + (obj2 instanceof Parent));
    System.out.println("obj2 instanceof Child: "
        + (obj2 instanceof Child));
    System.out.println("obj2 instanceof MyInterface: "
        + (obj2 instanceof MyInterface));
}

}

class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}

我在编译时遇到以下错误:

./Child.java:1: error: cannot find symbol
class Child extends Parent implements MyInterface{
                                      ^
  symbol: class MyInterface
InstanceOfDemo.java:9: error: cannot find symbol
System.out.println("obj1 instanceOf MyInterface" + (obj1 instanceof MyInterface));
                                                                    ^
  symbol:   class MyInterface
  location: class InstanceOfDemo
InstanceOfDemo.java:12: error: cannot find symbol
System.out.println("obj1 instanceOf MyInterface" + (obj2 instanceof MyInterface ));
                                                                    ^
  symbol:   class MyInterface
  location: class InstanceOfDemo
3 errors

下面是放置src代码的目录结构: -

-rw-rw-r-- 1 ankit ankit 174 Oct 25 15:36 Child.class
-rw-rw-r-- 1 ankit ankit  31 Oct 25 15:36 Child.java
-rw-rw-r-- 1 ankit ankit 920 Oct 25 15:41 InstanceOfDemo.class
-rw-rw-r-- 1 ankit ankit 637 Oct 25 15:41 InstanceOfDemo.java
-rw-rw-r-- 1 ankit ankit  25 Oct 25 15:20 MyInterface
-rw-rw-r-- 1 ankit ankit 186 Oct 25 15:36 Parent.class
-rw-rw-r-- 1 ankit ankit  16 Oct 25 15:18 Parent.java

注意:我从Child.javaInstanceOfDemo.java中删除了接口实现,以编译并运行代码。

编辑1: - 我可以认为instanceof运算符不能与Interfaces一起使用,因为根据Oracle的instanceof运算符的定义如下: -

  

instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是否是类的实例,子类的实例或实现特定接口的类的实例。

5 个答案:

答案 0 :(得分:3)

您的界面也应位于.java file,因此您需要将MyInterface放入MyInterface.java

-rw-rw-r-- 1 ankit ankit  25 Oct 25 15:20 MyInterface<---Rename it as 
                                                         MyInterface.java

再次编译之后,一切都应该正常工作

答案 1 :(得分:1)

查看有问题的文件列表,您的MyInterface缺少.java扩展名。

instanceof肯定可以与接口一起使用。

如果您想知道“或实现特定接口的类的实例”部分,则意味着myObj instanceof AnInterface测试,如果myObj是实现特定接口的类的实例,即AnInterface。 / p>

答案 2 :(得分:1)

MyInterface似乎是在另一个文件中定义的,文件的名称甚至不是 MyInterface.java 。因此,未生成 .class 文件(因此编译器无法找到)

解决方案是将文件MyInterface重命名为MyInterface.java并进行编译。这将生成一个 .class 文件,由JVM加载。

答案 3 :(得分:1)

将MyInterface重命名为MyInterface.java。您的目录列表和错误消息都同意它从未编译为类文件。

答案 4 :(得分:1)

将文件MyInterface重命名为MyInterface.java,然后您的代码将会运行