实例是否在检测接口时产生不一致的结果?

2022-09-05 00:21:28

有什么棘手的事情我应该知道吗?我正在通过一些方法传递对象列表,并测试这些对象是否使用 实现特定的接口。在某些情况下,将对象正确标识为实现接口,而在其他情况下则不然。它似乎在不同的地方给了我关于同一物体的不一致的结果。有什么技巧/陷阱我应该注意这里吗?instanceofinstanceofinstanceof

在预期评论中,您可能会有:

1)我知道是糟糕的形式。我正在使用一个无法更改的不太完美的对象层次结构,这是我能想到的最不坏的事情。instanceof

2)我正在努力创建一个代码示例,但是如果我要在这里粘贴任何有用的东西,我需要大大简化我的代码。同时,如果您以前见过这种情况并且可以揭示一些信息,请这样做。


答案 1

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


答案 2

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

与C++不同(我相信Smalltalk),对象不能在运行时更改类型。在C++类型在构造过程中会发生变化,因此无法从构造函数调用方法到派生类 [子类] 方法。