See if two object have the same type

后端 未结 5 1822
终归单人心
终归单人心 2021-02-04 02:00

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         


        
相关标签:
5条回答
  • 2021-02-04 02:22

    Something like this:

    if(classA.getClass().getName().equals(classB.getClass().getName()))
         <do something>
    
    0 讨论(0)
  • 2021-02-04 02:32

    You could do

    if (obj1.getClass() == obj2.getClass()) { ... }
    
    0 讨论(0)
  • 2021-02-04 02:33

    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
    }
    
    0 讨论(0)
  • 2021-02-04 02:37

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

    0 讨论(0)
  • 2021-02-04 02:39

    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.

    0 讨论(0)
提交回复
热议问题