Search code examples
javainstanceof

See if two object have the same type


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?


Solution

  • 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.