Как реализовать обратные вызовы в Java

Я предполагаю Ваше использование mod_proxy_http (или стабилизатор прокси).

Взгляд в Ваших журналах кота (localhost.log или catalina.log) я подозреваю Ваше наблюдение исключения в Вашем веб-стеке, пузырящемся и закрывающем сокет, с которым подключен рабочий кота.

10
задан Parvin Gasimzade 24 August 2012 в 08:57
поделиться

4 ответа

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

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

Так, для вашего примера:

 interface Command {
     public void execute();
 }

, а затем вы передаете экземпляр этой команды при выполнении login () функция (не проверено, Я должен, вероятно, упомянуть, что, хотя это общее объяснение того, как это работает, в Java уже есть кое-что для этой цели, а именно ActionListener и связанные классы ( actionPerformed () в основном это execute () в Command ). В основном они предназначены для использования с классами AWT и / или Swing и, следовательно, имеют особенности, специфичные для этого варианта использования.

25
ответ дан 3 December 2019 в 15:06
поделиться

Идиома, используемая в Java для достижения поведения обратного вызова, - это Listeners. Создайте интерфейс с методами для нужных вам событий, имейте механизм для регистрации объекта слушателя с источником событий. Когда происходит событие, вызовите соответствующий метод для каждого зарегистрированного слушателя. Это общий шаблон для событий AWT и Swing; случайно выбранный пример см. в FocusListener и соответствующий объект FocusEvent .

Обратите внимание, что все события в Java AWT и Swing в конечном итоге наследуются от EventObject , и по соглашению вызывается прослушиватель SomethingListener и событие SomethingEvent . Хотя вы можете называть свой код как угодно, проще поддерживать код, который придерживается соглашений платформы.

3
ответ дан 3 December 2019 в 15:06
поделиться

Насколько мне известно, Java не поддерживает привязку методов или делегатов, как это делает C #.

Возможно, вам придется реализовать это через интерфейсы (например, как прослушиватель команд).

Возможно, вам будет полезен этот веб-сайт:

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

1
ответ дан 3 December 2019 в 15:06
поделиться

Вы можете посмотреть swt-сниппеты (посмотрите на слушателей)

http://www.eclipse.org/swt/snippets/

или вы используете класс runnable, перезаписывая метод run своим кодом обратного вызова при создании экземпляра

1
ответ дан 3 December 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: