public boolean isUserControled(){
return action.getClass().getSuperclass().toString().equals("class logic.UserBehaviour");
}
我认为这段代码非常明显。有更聪明的方法吗?
由于
答案 0 :(得分:11)
(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);