聪明的方式检查超级

时间:2011-04-02 15:08:58

标签: java class comparison superclass

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

我认为这段代码非常明显。有更聪明的方法吗?

由于

3 个答案:

答案 0 :(得分:11)

如果action是扩展UserBehavior的类型的对象,

(action instanceof logic.UserBehaviour)将返回true。

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

的摘录
  

类型比较运算符   的instanceof

     

instanceof运算符比较   对象到指定的类型。您可以   用它来测试一个对象是否是一个   类的实例,类的实例   子类,或类的实例   实现特定的   接口

     

以下程序,InstanceofDemo,   定义父类(名为Parent),   一个简单的界面(命名为   MyInterface)和一个子类(命名为   从父母继承的孩子)   并实现接口。

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{} 

输出:

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

使用instanceof运算符时,请记住null不是任何实例。

答案 1 :(得分:9)

除非你特别想要只检查第一个超类,否则最好使用:

return (action instanceof logic.UserBehavior);

你的方法会更好:

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

拨打toString()不是最好的主意。

或者更好,由Ulrik发布:

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

答案 2 :(得分:5)

如果你只想检查第一个超类:

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

否则:

return (action instanceof logic.UserBehaviour);