3

ブロックは非常に便利なので、iPhone アプリでブロックの使用を開始したいと思います。

ただし、すべてのアプリも Android Java に移植する必要があるため、ブロックを簡単に変換する方法がわからないため、これが良いアイデアかどうかはわかりません。

これまでのところ、iOS を Android に移植するのは簡単で、ほぼ 1 行ずつですが、iOS ブロックはどのように Java に変換されるのでしょうか? (もちろん、Java ブロックについて話しているわけではありません)

どうもありがとう!

4

4 に答える 4

3

Java では、匿名 (名前のない) クラスを使用できます。さらに、別のクラスを拡張できます。このように使用すると、Objective C のブロックに似ています。

Runnable実装または類似の匿名クラスが定義されていることがよくあります。これは、ブロックと同様のことを行っています。後で使用するためにどこかに渡されるコードの匿名のインライン定義を提供します。

詳細については、次の例を参照してください: http://en.wikipedia.org/wiki/Closure_%28computer_science%29#Local_classes_.28Java.29

したがって、Java では次のように記述できます。

doMyThing(new Runnable() {
  void run() {
     // your 'block' code here
  }
});

このメソッドdoMyThingは、後で run メソッドを呼び出すことができます (または、Runnable を新しい Thread オブジェクトに渡すなどしてスレッドとして生成します)。

ここでさらに議論があります:

Objective-C ブロックと比較した Java 匿名クラスの制限

http://www.jondev.net/articles/Objective-C_blocks_vs_Java_Anonymous_Classes_or_Functions_(コールバック)

于 2012-09-10T19:33:45.557 に答える
2

残念ながら、Java にはクロージャがありません。ブロックごとに、これをある種のコールバック メカニズムに変換する必要があります。これは、Java で必要な面倒なボイラープレートです。あなたは常に次のようなことをしなければなりません

   button.setOnClickListener(
      new View.OnClickListener() { 
        public void onClick(View v) { 
           doSomething();)
      }
  });

したがって、匿名インターフェイスを作成し、メソッドをオーバーライドしてから、そこに独自のものを配置する必要があります。本当にできるようにしたいのは、次のようなものです。

button.onClick(doSomething(););
于 2012-09-10T19:29:27.563 に答える
1

これはどうですか

yourObj.passABlock(new actionBlock() {
    public void action() {
        //Whatever
    }
});

たとえば、Android のRunnableクラスは、上記のように実行できるコマンドを表します (これは別のスレッドにあります)。

これは基本的に「コマンド」設計パターンを使用して実装されます。

public interface Command {
   void execute();
}
于 2012-09-10T19:30:02.810 に答える
-1

それは簡単です。

iOS ブロック - 閉鎖です。したがって、Java にもクロージャがあります。私は iOS と Android の両方のプラットフォーム向けに開発していますが、これは本当です。

ウィキペディアの記事http://en.wikipedia.org/wiki/Closure_(computer_science )をご覧ください。iOS および Android 用のコード サンプルがあります。

于 2012-09-10T19:30:26.237 に答える