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

时间:2012-04-15 14:18:57

标签: 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怎么检查呢?

5 个答案:

答案 0 :(得分:46)

你的意思是

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

如果obj1obj2具有相同的特定类别,则应返回true。

但如果您将AB extends A进行比较,则无效。如果你想要等于返回true,即使一个是另一个的子类型,你将不得不写一个更强大的比较函数。我认为您可以通过使用getSuperClass()循环来实现层次结构树。

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

答案 1 :(得分:6)

你可以做到

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

答案 2 :(得分:1)

这样的事情:

if(classA.getClass().getName().equals(classB.getClass().getName()))
     <do something>

答案 3 :(得分:0)

由于B,C和D是A的子类,并且您想对这些类执行某些操作,因此我不会使用instanceOf运算符。这个只有在没有别的办法时才有用。

你可以更好地覆盖超级方法和/或变量,这样你就可以使用相同的所有对象,他们会做出不同的事情(例如打印它自己的类型)。

答案 4 :(得分:-2)

instanceof需要指向一个类,而不是另一个对象。要检查两个对象是否来自同一类型的对象,请执行以下操作。

if((obj1 instanceof ClassName) && (obj2 instanceof ClassName)) {
  do whatever
}