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-c
Something like this:
if(classA.getClass().getName().equals(classB.getClass().getName()))
<do something>
You could do
if (obj1.getClass() == obj2.getClass()) { ... }
instanceof needs to point towards a class, not another object. To check that two objects both come from the same type of object do something to the following ..
if((obj1 instanceof ClassName) && (obj2 instanceof ClassName)) {
do whatever
}
Since B, C and D are subclasses of A, and you want to do something with these classes, I wouldn't use the instanceOf
operator. This one's only useful for when there's no other way.
You could better override the super methods and/or variables, so you can use all the objects the same, tough they will do something different (for example printing it's own type).
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
.