F. P.
F. P.

Reputation: 5086

Smart way to check super-class

public  boolean isUserControled(){      
        return action.getClass().getSuperclass().toString().equals("class logic.UserBehaviour");
}

I think this piece of code is pretty self-explanatory. Is there a smarter way to do this?

Thanks

Upvotes: 9

Views: 25120

Answers (3)

Mat
Mat

Reputation: 206775

Unless you specifically want to check only the very first superclass, it would be better to use:

return (action instanceof logic.UserBehavior);

Your method would be better with this:

action.getClass().getSuperClass().name().equals("logic.UserBehavior");

The call to toString() is not the best idea.

Or better yet, as posted by Ulrik:

action.getClass().getSuperClass() == logic.UserBehavior.class

Upvotes: 11

Speck
Speck

Reputation: 2309

(action instanceof logic.UserBehaviour) will return true if action is an object of a type that extends UserBehavior.

An excerpt from http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

The Type Comparison Operator instanceof

The instanceof operator compares an object to a specified type. You can use it to test if an object is an instance of a class, an instance of a subclass, or an instance of a class that implements a particular interface.

The following program, InstanceofDemo, defines a parent class (named Parent), a simple interface (named MyInterface), and a child class (named Child) that inherits from the parent and implements the interface.

class InstanceofDemo {
  public static void main(String[] args) {

    Parent obj1 = new Parent();
    Parent obj2 = new Child();

    System.out.println("obj1 instanceof Parent: " + (obj1 instanceof Parent));
    System.out.println("obj1 instanceof Child: " + (obj1 instanceof Child));
    System.out.println("obj1 instanceof MyInterface: " + (obj1 instanceof MyInterface));
    System.out.println("obj2 instanceof Parent: " + (obj2 instanceof Parent));
    System.out.println("obj2 instanceof Child: " + (obj2 instanceof Child));
    System.out.println("obj2 instanceof MyInterface: " + (obj2 instanceof MyInterface));
  }
}

class Parent{}
class Child extends Parent implements MyInterface{}
interface MyInterface{} 

Output:

obj1 instanceof Parent: true
obj1 instanceof Child: false
obj1 instanceof MyInterface: false
obj2 instanceof Parent: true
obj2 instanceof Child: true
obj2 instanceof MyInterface: true

When using the instanceof operator, keep in mind that null is not an instance of anything.

Upvotes: 13

Ulrik
Ulrik

Reputation: 402

If you want to check only the very first superclass:

return action.getClass().getSuperclass() == logic.UserBehavior.class;

Otherwise:

return (action instanceof logic.UserBehaviour);

Upvotes: 5

Related Questions