instanceof会产生检测接口的不一致结果吗?

mor*_*des 12 java instanceof

有什么棘手的我应该知道的instanceof吗?我通过几种方法传递一个对象列表,并测试这些对象是否使用了特定的接口instanceof.在某些情况下,instanceof正确地将对象标识为实现接口,而在其他情况下则不然.它似乎在不同的地方给我不一致的结果.我应该知道这里有什么诀窍/问题吗?

期待您的评论:

1)我知道instanceof形式不好.我正在处理一个不能完美的对象层次结构,这是我能想到的最不好的事情.

2)我正在努力创建一个代码示例,但如果我要在这里粘贴任何有用的东西,我将需要大量简化我的代码.与此同时,如果你以前看过这个并且可以解决这个问题,请做.

Jon*_*eet 14

您是否动态地从不同的类加载器加载任何类型?唯一一次我看到明显不一致的结果是当我有两行代码,看起来他们引用相同的类型,但实际上从不同的类加载器加载了该类型.


Tom*_*ine 9

instanceof总是返回falsenull.如果左侧的静态类型不可能是指定类型的实例,则不会编译.除此之外,它应该毫无意外地工作.

与C++(我相信Smalltalk)不同,对象不能在运行时更改类型.在C++中,类型在构造期间发生更改,因此无法从构造函数到派生类[subclass]方法调用方法.


mor*_*des 9

好的,问题解决了.像往常一样,这个问题比我想象的要少.我正在处理的项目处于一个不幸的状态,即有一些重复的类名.我正在使用foo.MyInterface创建类,并测试bar.MyInterface的实例.谢谢你的回复.它确实帮助我思考它.

  • 具有讽刺意味的是,我在答案中几乎包含了这种可能性,但由于某种原因最终没有.这将教会我 - 下次我会发布所有的想法,无论多么愚蠢:) (3认同)

cad*_*ian 5

我所知道的唯一问题nullinstanceof没有类型.