web-dev-qa-db-ja.com

Javaでカスタムリスナーを作成する方法は?

Javaで独自のリスナーを設定する方法について知りたいです。たとえば、1から100までの数値をインクリメントする関数があります。値が50に達したらリスナーを設定したいのですが、どうすればよいですか? Plsは私にチュートリアルを提案します。

26
vnshetty

リスナーを使用するクラスのソースをご覧ください。実際、それは非常に簡単です:

  • リスナー用のインターフェースを作成します。 MyListener
  • MyListenerのリストを維持する
  • リスナーがリッスンする各イベントで、リストを反復処理し、イベントパラメーターを使用して適切なメソッドを呼び出します。

オブザーバーパターンについては、Java=コードは wikipedia をご覧ください。

24
Thomas

https://stackoverflow.com/a/6270150/3675925

おそらく observer pattern を調べたいでしょう。

始めるためのサンプルコードを次に示します。

import Java.util.*;

// An interface to be implemented by everyone interested in "Hello" events
interface HelloListener {
    void someoneSaidHello();
}

// Someone who says "Hello"
class Initiater {
    private List<HelloListener> listeners = new ArrayList<HelloListener>();

    public void addListener(HelloListener toAdd) {
        listeners.add(toAdd);
    }

    public void sayHello() {
        System.out.println("Hello!!");

        // Notify everybody that may be interested.
        for (HelloListener hl : listeners)
            hl.someoneSaidHello();
    }
}

// Someone interested in "Hello" events
class Responder implements HelloListener {
    @Override
    public void someoneSaidHello() {
        System.out.println("Hello there...");
    }
}

class Test {
    public static void main(String[] args) {
        Initiater initiater = new Initiater();
        Responder responder = new Responder();

        initiater.addListener(responder);

        initiater.sayHello();  // Prints "Hello!!!" and "Hello there..."
    }
}
18
do01

ユースケースには EventBus を使用することをお勧めします。素敵なAPIデザインを備えており、使いやすいです。 Getting Started セクションを見て、どのように機能するかを確認してください。

0
crusam

すべての変数にリスナーをアタッチできる組み込みメカニズムはありません。監視するオブジェクトは、それ自体をサポートする必要があります。たとえば、Observableになり、onChangeイベントをそのObserverに送信します(追跡されていることを確認する必要もあります)。

0
Thilo