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

2022-09-01 16:37:25

假设我有一个类 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的情况下检查这个?


答案 1

你的意思是像这样的东西

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

这应该返回 true,前提是两者和属于同一特定类。obj1obj2

但是,如果您与 进行比较,这将不起作用。如果你想要一个返回 true 的相等性,即使一个是另一个子类型的子类型,你也必须编写一个更强大的比较函数。我认为您可以通过循环使用来执行此操作,以向上爬层次结构树。AB extends AgetSuperClass()

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


答案 2

你可以做

if (obj1.getClass() == obj2.getClass()) { ... }