当前位置: 首页 > 知识库问答 >
问题:

将instanceof运算符与接口一起使用时出错?

郏实
2023-03-14

我试图了解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:-我是否认为操作符不能与接口一起使用,因为根据Oracle定义操作符的实例如下:

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


共有3个答案

甄志
2023-03-14

MyInterface似乎是在另一个文件中定义的,文件名甚至不是MyInterface。JAVA因此,。类文件没有生成(因此编译器找不到)

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

蓟清野
2023-03-14

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

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

如果您想知道“或实现特定接口的类的实例”部分,这意味着如果myObj是实现特定接口(即接口)的类的实例,则接口的myObj实例将进行测试。

爱花蜂
2023-03-14

你的接口也应该在. java文件中,所以你需要把MyInterface放在MyInterface.java

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

在此之后,请重新编译,一切正常

 类似资料:
  • 问题内容: 整个泛型问题有点让我陷入困境,RTT更是如此。 规范?嗯,这是要点: 然后我会这样称呼它: 这样一来,我便可以在实际的帮助程序中灵活地分配查询返回类型。它进行一些转换和对象创建。我看到的是没有匹配项,我应该以其他方式这样做吗?还是整个想法不好? 真正的核心是我不了解class.isInstance和instanceOf运算符之间的区别?我应该使用后者吗? 问题答案: 这样一来,我便可以

  • 问题内容: 是否有可以与运算符一起使用的有效的类Type变量?例如: 作为替代方案: 会有性能上的好处吗? 问题答案: 你在做什么实际上是不一样的。考虑一下子类会发生什么(我知道您不能子类,所以在这种情况下不要紧)。 如果您有一个对象,并且想知道它是否是某种类型的实例,并且您有该对象,则可以使用该方法。 无论哪种情况,我都希望性能差异不大。

  • 问题内容: 我正在处理一些服务器代码,其中客户端以JSON形式发送请求。我的问题是,有许多可能的请求,每个请求的实现细节都不尽相同。因此,我想使用一个Request接口,它定义为: 从那里,我在名为如下的类中实现了接口: 为了使用JSON,我创建了一个实例并注册了一个,如下所示: 然后,如下面的代码片段所示,我使用了它: 我得到了预期的输出。 我希望做的是用类似于以下内容的内容替换该行,但是这样做

  • 我试图使用二元运算符来比较两个值: 现在,我收到一条失败消息:二进制运算符“==”不能应用于unichar或String类型的操作数。我还尝试转换字符: 不工作...

  • 问题内容: 我想知道有关Java 中运算符的以下行为。 为什么会这样呢?和之间没有关系,但是它给出false,而如果给出编译器错误? 问题答案: 由于Java没有多类继承,因此在编译过程中绝对知道类型的对象不能是的子类型。另一方面,它可能是interface的子类型,例如在这种情况下: 因此,仅查看表达式编译器无法预先知道它是对还是错,但是查看它知道这始终是假的,因此毫无意义,可帮助您防止错误。如

  • 问题内容: 如何将Go程序与C库接口? 我一直在浏览Go的源代码,但我仍然没有弄清楚。如果有人已经这样做了,请分享一下吗? 更新: 感谢@fserb,我从Go来源发布了一些文档: Cgo支持创建调用C代码的Go包。 用法:cgo [编译器选项] file.go 调用gcc编译软件包的C部分时,编译器选项将通过未解释的传递。 输入file.go是一个语法上有效的Go源文件,该文件导入伪包“ C”,然