1

Objective C には関数ブロックがあります。コードのブロックを変数に保存して、パラメーターとして渡すことができます。

[objects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    // Enumerating all the objects of an array
}];

私のゲームでは、MenuScenewith MenuSceneItems があります。この場合、クリックされた場合に実行するコードを渡したいと思います。これにより、switch ステートメントが不要になります。

これを行う方法またはJavaで同様のことを行う方法はありますか?

4

3 に答える 3

2

Java では、匿名クラスを使用する必要がある匿名関数ブロックを持つことはできません。

menuScene.executeWhenClicked(new Runnable() {
  public void run() {
    // do something
  }
});
于 2012-11-29T13:08:17.590 に答える
1

これは単純なポリモーフィズムのように聞こえます。

public interface Action {
   void doSomethingWhenPressed();
}

上記のインターフェースを実装するオブジェクトを実装するだけです。それを引数として渡します。

おそらく匿名クラスを使用してこれを行うでしょう。

// this method takes an 'Action' as an argument
passToMethod(new Action() {
   public void doSomethingWhenPressed() {
      System.out.println("Pressed!");
   }
});
于 2012-11-29T13:07:20.827 に答える
1

Java では、Runnable を拡張するオブジェクト (明示的なクラス型を持つ必要はありません) を作成し、コードのブロックをrunメソッドに配置します。そのようです

    Runnable myDelayedBlockOfCode = new Runnable() {
        public void run() {
            doA();
            doB();
            doC();
        }
    };

フレームワークを使用している場合は、そのようなコード ブロックをフレームワークが呼び出すものに配置できるフレームワーク固有のインターフェイスを詳しく調べてください。

于 2012-11-29T13:08:04.330 に答える