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

このコードは一目瞭然だと思います。これを行うためのよりスマートな方法はありますか?

ありがとう

4

3 に答える 3

13

(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は何のインスタンスでもないことに注意してください。

于 2011-04-02T15:11:32.880 に答える
11

特に最初のスーパークラスのみをチェックしたい場合を除いて、以下を使用することをお勧めします。

return (action instanceof logic.UserBehavior);

あなたの方法はこれでより良いでしょう:

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

への呼び出しtoString()は最良のアイデアではありません。

またはさらに良いことに、 Ulrikによって投稿されたように:

action.getClass().getSuperClass() == logic.UserBehavior.class
于 2011-04-02T15:11:38.830 に答える
5

最初のスーパークラスのみをチェックしたい場合:

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

さもないと:

return (action instanceof logic.UserBehaviour);
于 2011-04-02T15:20:51.720 に答える