Может ли кто-нибудь объяснить, что такое метод обратного вызова с некоторыми примерами в Java? - PullRequest
3 голосов
/ 07 июля 2010

Может кто-нибудь объяснить, что такое метод обратного вызова с примером из примера в Java?

Ответы [ 3 ]

3 голосов
/ 07 июля 2010

Я нашел это, прибегнув к помощи "обратного вызова java":

http://www.javaworld.com/javaworld/javatips/jw-javatip10.html

Если вы начнете пользоваться Google самостоятельно, вы часто сможете получить более быстрые ответы.

3 голосов
/ 07 июля 2010

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

В приведенном ниже примере я предположил существование интерфейса слушателя с именем EventListener. EventListener s зарегистрированы с "наблюдаемым" классом EventStream (обратите внимание, что я опущен методы addListener и removeListener для ясности). После запуска поток событий создает отдельный поток, который занимается работой по получению событий и обратному вызову каждого слушателя. Я использовал отдельный поток, чтобы проиллюстрировать, что метод обратного вызова может быть вызван потоком, отличным от того, который использовался для регистрации слушателя.

public class EventStream {
  private final List<EventListener> listeners = new CopyOnWriteArrayList<EventListener>();

  public void start() {
    // Create thread responsible for performing I/O, creating and
    // broadcasting Event objects to any registered listeners.
    Thread t = new Thread(...);
    t.start();
  }

  // Notification method.  Called by internal event stream thread.
  protected void fireEventReceived(Event e) {
    for (EventListener l : listeners) {
      l.eventReceived(e);
    }
  }
}
2 голосов
/ 07 июля 2010

Обратный вызов или обратный вызов - это вызов метода более высокого уровня, чем вызывающий. В частности, в процедурном программировании мы обычно думаем о вызовах более высокого уровня в более низкие уровни. Код приложения, вызывающий код библиотеки, и более тонкое расслоение. Обратный вызов отменяет рацион, имея ссылку на метод, переданный на нижний уровень.

В Java это обычно реализуется путем реализации интерфейса, так как язык (пока) не имеет концепции ссылки на одинокий метод - это все объекты с классами времени выполнения. Часто они будут реализованы как анонимные внутренние классы. С другой стороны, это могут быть внешние классы, возможно, с другой конфигурацией, например, сервлеты и апплеты.

Обратный вызов может быть синхронным и асинхронным. Синхронные обратные вызовы вызываются во время отдельного выполнения метода нижнего уровня, например, как в Execute Around Idiom . Они могут быть вызваны позже как в событиях AWT / Swing (тот же поток) или, скажем, java.util.concurrent.ExecutorService (разные потоки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...