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)
アクションが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");
への呼び出しtoString()
は最良のアイデアではありません。
またはさらに良いことに、 Ulrikによって投稿されたように:
action.getClass().getSuperClass() == logic.UserBehavior.class
最初のスーパークラスのみをチェックしたい場合:
return action.getClass().getSuperclass() == logic.UserBehavior.class;
さもないと:
return (action instanceof logic.UserBehaviour);