See if two object have the same type

Ramy Al Zuhouri picture Ramy Al Zuhouri · Apr 15, 2012 · Viewed 29.9k times · Source

Let's say that I have a class A, and that B,C,D are derived from A.
If I want to know what's the type of an object referenced, I can declare:

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

This because I am sure that the classes derived from A are only B,C and D.
But what if I want just to check that two references point to the same kind of object?
So something like:

if(obj1 instanceof obj2)
   <do something>

But of course the syntax is wrong.How to check this without one thousand if-else?

Answer

Jack picture Jack · Apr 15, 2012

You mean something like

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

This should return true just if both obj1 and obj2 are of the same specific class.

But this won't work if you are comparing A with B extends A. If you want equality that returns true even if one is a subtype of another you will have to write a more powerful comparison function. I think that you can do it by looping with getSuperClass() to go up the hierarchy tree.

I think a simple solution can be also to do A.getClass().isAssignableFrom(B.getClass()), assuming that B extends A.