public boolean isUserControled(){
return action.getClass().getSuperclass().toString().equals("class logic.UserBehaviour");
}
我认为这段代码是不言自明的。有没有更聪明的方法来做到这一点?
谢谢
public boolean isUserControled(){
return action.getClass().getSuperclass().toString().equals("class logic.UserBehaviour");
}
我认为这段代码是不言自明的。有没有更聪明的方法来做到这一点?
谢谢
(action instanceof logic.UserBehaviour)
如果 action 是扩展 UserBehavior 的类型的对象,将返回 true。
摘自http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
类型比较运算符 instanceof
instanceof 运算符将对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例。
下面的程序 InstanceofDemo 定义了一个父类(命名为 Parent)、一个简单的接口(命名为 MyInterface)和一个从父类继承并实现该接口的子类(命名为 Child)。
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 不是任何事物的实例。
除非您特别想只检查第一个超类,否则最好使用:
return (action instanceof logic.UserBehavior);
你的方法会更好:
action.getClass().getSuperClass().name().equals("logic.UserBehavior");
调用 totoString()
不是最好的主意。
或者更好的是,正如Ulrik所发布的:
action.getClass().getSuperClass() == logic.UserBehavior.class
如果您只想检查第一个超类:
return action.getClass().getSuperclass() == logic.UserBehavior.class;
否则:
return (action instanceof logic.UserBehaviour);