java - 查看两个对象是否具有相同的类型

标签 java instanceof

假设我有一个类 A,而 B、C、D 是从 A 派生的。
如果我想知道引用的对象的类型是什么,我可以声明:

// pseudo-code
if(obj instanceof B)
    < is B>
else if(obj instanceof C)
    < is C>
else
    <is D>

这是因为我确信从 A 派生的类只有 B、C 和 D。
但是如果我只想检查两个引用是否指向同一种对象呢?
所以像:

if(obj1 instanceof obj2)
   <do something>

但是语法当然是错误的。没有一千个if-else怎么检查这个?

最佳答案

你的意思是这样的

obj1.getClass().equals(obj2.getClass())

这应该返回 true,如果两者都是 obj1obj2属于同一特定类别。

但是,如果您要比较 A,这将不起作用与 B extends A .如果您想要返回 true 的相等性,即使一个是另一个的子类型,您将不得不编写一个更强大的比较函数。我认为你可以通过循环来做到这一点 getSuperClass()向上层级树。

我认为一个简单的解决方案也可以做到A.getClass().isAssignableFrom(B.getClass()) , 假设 B extends A .

关于java - 查看两个对象是否具有相同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162802/

相关文章:

java - 如何知道文件复制是否在 'in progress'/java (1.6) 中完成

java - 在真实设备中运行应用程序时遇到问题

java - 自定义@Column JPA 注释,如何?

java - 底部表格不适用于谷歌地图

java优化挑剔: is it faster to cast something and let it throw exception than calling instanceof to check before cast?

python - 从类型中提取数据

java - 如何返回未使用空格的数组?

java - 如何使用异常 instanceof 改进丑陋的 catch block

javascript - 确定一个对象是否是 JavaScript 中的 Map

javascript - 使用函数继承时, `instanceof` 相当于什么?