假设我有一个类 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,如果两者都是 obj1
和 obj2
属于同一特定类别。
但是,如果您要比较 A
,这将不起作用与 B extends A
.如果您想要返回 true 的相等性,即使一个是另一个的子类型,您将不得不编写一个更强大的比较函数。我认为你可以通过循环来做到这一点 getSuperClass()
向上层级树。
我认为一个简单的解决方案也可以做到A.getClass().isAssignableFrom(B.getClass())
, 假设 B extends A
.
关于java - 查看两个对象是否具有相同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162802/