我正在尝试根据链接了解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.java
和InstanceOfDemo.java
中删除了接口实现,以编译并运行代码。
编辑1: - 我可以认为instanceof运算符不能与Interfaces一起使用,因为根据Oracle的instanceof运算符的定义如下: -
instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是否是类的实例,子类的实例或实现特定接口的类的实例。
答案 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
,然后您的代码将会运行