假设我有一个类 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())
如果两者都返回 trueobj1
and obj2
属于同一特定类别。
但如果你要比较的话,这是行不通的A
with B extends A
。如果您希望相等返回 true,即使一个是另一个的子类型,您也必须编写一个更强大的比较函数。我认为你可以通过循环来做到这一点getSuperClass()
进入层次结构树。
我认为一个简单的解决方案也可以做到A.getClass().isAssignableFrom(B.getClass())
, 假如说B extends A
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)