Callback - асинхронная обработка результата выполнения какого-либо кода. Например показали диалоговое окно и надо, обработать результат выбора пользователя. Так как пользователь может думать очень долго, то обработку результата выбора надо запустить только после того, как пользователь сделал выбор.
В Java функция обратного вызова (Callback) реализовывается через интерфейсы:
package callback;
import javax.swing.*;
public class SomeClass {
String replyTo;
interface Callback{ // объявили интерфейс внутри класса
void callingBack(String s); // метод интерфейса
}
private Callback callback;
public void registerCallBack(Callback callback){
this.callback = callback;
}
void doSomething(){
int reply = JOptionPane.showConfirmDialog(null, "Вы программист?", "Опрос", JOptionPane.YES_NO_OPTION);
if (reply == JOptionPane.NO_OPTION){
replyTo = "Нет";
}
if (reply == JOptionPane.YES_OPTION){
replyTo = "Да";
}
callback.callingBack(replyTo); //вызов метода интерфейса
}
}
Создаем класс, реализующий callback:
package callback;
public class MyClass implements SomeClass.Callback {
@Override
public void callingBack(String s) {
if (s != null) {
System.out.println("Ваш ответ: " + s);
} else {
System.out.println("Вы не ответили на вопрос!");
}
}
}
Теперь реализуем использование нашего класса:
package callback;
public class Main {
public static void main(String[] args) {
SomeClass someClass = new SomeClass();
MyClass myClass = new MyClass();
someClass.registerCallBack(myClass); // зарегистрировали myClass в качестве коллбэка
someClass.doSomething(); // запустили отображение вопроса. После того как будет сделан выбор, в консоли будет выведен результат выбора.
}
}
|