我试图了解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运算符将对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例。
MyInterface
似乎是在另一个文件中定义的,文件名甚至不是MyInterface。JAVA因此,。类文件没有生成(因此编译器找不到)
解决方法是将文件MyInterface
重命名为MyInterface.java
并编译它。这将生成一个. class文件,由JVM加载。
查找有问题的文件列表,您的MyInterface缺少. java扩展名。
instanceof
肯定可以与接口一起使用。
如果您想知道“或实现特定接口的类的实例”部分,这意味着如果myObj是实现特定接口(即接口)的类的实例,则接口的myObj实例将进行测试。
你的接口也应该在. 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”,然