Інтерфейси та зворотній виклик, Блог тільки про Java

Вчимося програмувати на Java з нуля

Інтерфейси та зворотній виклик

зворотній
Механізм зворотного виклику(callback) широко поширений у програмуванні. При зворотному виклик програміст задає дії, які повинні виконуватися щоразу, коли відбувається певна подія. Наприклад, можна задати дію, яка має бути виконана після натискання на деякій кнопці або при виборі певного пункту меню. Ми розглянемо просту ситуацію.

Пакетjavax.swing містить класTimer, який можна використовувати для відліку інтервалів часу. Наприклад, якщо у програмі передбачено годинник, то за допомогою класуTimer можна відраховувати кожну секунду і оновлювати циферблат годинника.

Встановлюючи таймер, ми задаємо інтервал часу і вказуємо, що має статися після закінчення. Як вказати таймеру, що він має робити? У багатьох мовах програмування визначається ім'я функції, яку таймер повинен періодично викликати. Проте класи зі стандартної бібліотеки мовиJava використовують об'єктно-орієнтований підхід. Програміст повинен передати таймер об'єкт деякого класу. Після цього таймер викликає один із методів даного об'єкта. Передача об'єкта - гнучкіший механізм, ніж виклик функції, оскільки об'єкт може нести додаткову інформацію.

Зрозуміло, таймер повинен знати, який метод він має викликати. Для цього таймеру потрібно вказати об'єкт класу, що реалізує інтерфейсActionListener з пакетаjava.awt.event. Цей інтерфейс виглядає так:

Після закінчення заданого інтервалу часу таймер викликає методactionPerformed().

Припустимо, нам потрібно щодесять секунд виводити на екран повідомлення про поточний час, що супроводжуєтьсязвуковим сигналом. Для цього необхідно визначити клас, який реалізує інтерфейсActionListener, а потім помістити оператори, які потрібно виконати, у тіло методуactionPerformed().

Зверніть увагу на параметрActionEvent методуactionPerformed(). Він містить інформацію про подію, наприклад, про об'єкт, що його породив. У цій програмі детальна інформація про подію не є важливою, тому можна просто проігнорувати цей параметр.

Потім слід створити об'єкт даного класу і передати його конструктору класуTimer :