Как создать пользовательские слушатели в Java? - PullRequest
26 голосов
/ 04 августа 2011

Я хочу знать о том, как установить наши собственные Слушатели в java. Например, у меня есть функция, которая увеличивает число от 1 до 100. Я хочу установить слушателя, когда значение достигает 50. Как я могу это сделать?Просьба предложить мне любой учебник.

Ответы [ 4 ]

24 голосов
/ 04 августа 2011

Посмотрите на источник любого класса, который использует слушателей.На самом деле это довольно просто:

  • создать интерфейс для вашего слушателя, например, MyListener
  • поддерживать список MyListener
  • для каждого события,слушатели должны слушать, выполнять итерацию по списку и вызывать соответствующий метод с некоторыми параметрами события

Что касается шаблона наблюдателя вместе с некоторым кодом Java, посмотрите wikipedia .

18 голосов
/ 16 апреля 2016

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

Возможно, вы захотите взглянуть на шаблон наблюдателя .

Вот пример кода, с которого можно начать:

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..."
    }
}
0 голосов
/ 04 августа 2011

Я бы рекомендовал использовать EventBus для вашего случая использования. Он имеет приятный дизайн API и прост в использовании. Взгляните на их Getting Started раздел, чтобы увидеть, как он работает.

0 голосов
/ 04 августа 2011

Нет встроенного механизма, который позволял бы вам присоединять слушателей ко всем переменным. Объект, который вы хотите посмотреть, должен сам обеспечить поддержку для этого. Например, он может стать Observable и запускать события onChange для своих наблюдателей (что вы также должны убедиться, что они отслеживаются).

...