16

私は iOS 向けのコーディングを行っており、Objective-C のブロックの概念に精通しています。今、私は Android 用の Java を学んでいて、いくつかのアプリを Android から iOS に変換しようとしています。

Javaにはブロックに完全に相当するものがないことを読んだので、完了ハンドラーまたは同様に機能するものを実装するための最良の代替手段は何かを知りたい.

4

2 に答える 2

27

一般的なインターフェイスの種類。ハンドラーにパラメーターと戻り値の型がない場合は、Rob が提案したようRunnableに (これは)を使用できます。しかし、それはあなた自身を定義するのに十分簡単です:interfacevoid

interface CompletionHandler {
    public void handle(String reason);
}

そして、それを自分のクラスに渡します:

something.setCompletionHandler(new CompletionHandler() {
    @Override
    public void handle(String reason) {
        ...
    }
});

他のクラスでは:

void setCompletionHandler(CompletionHandler h) {
     savedHandler = h;
}

そして、メソッドを呼び出すだけでそれを呼び出します:

savedHandler.handle("Some mysterious reason");

この種のことは、Java Swing および Android ライブラリの「リスナー」に対してあらゆる場所で行われます。View.OnClickListenerたとえば、 を参照 してください。

(PS Java 8 ラムダは、これらすべてのインターフェイスの例で使用できると思います。)

于 2014-02-27T19:16:32.327 に答える