Создание пользовательских прослушивателей в Java
Мне было интересно, как можно было бы создать собственный слушатель для чего-то и использовать его так же, как любой другой слушатель, например.
public interface Listener {
public void onListen(Event e);
}
А потом это в моем классе
public class test implements Listener {
Object.add(new Listener() {
@Override
public void onListen(Event e) {
}
});
}
Я предполагаю, что я действительно спрашиваю также, где я могу определить, как проверить, происходит ли что-то, что происходит с слушателем, который я создаю?
Если это не имеет смысла, скажите мне, и я уточню это.
Если в лучшем случае это не имеет смысла для вас, я попробую это. Как я могу заставить слушателя проверить, изменился ли выбранный параметр в combobox на другой вариант. Мне действительно не нужен прослушиватель combobox, но это был всего лишь пример.
Ответы
Ответ 1
Вот краткий пример:
private static class Position {
}
private static class Ball {
private ArrayList<FootballObserver> observers = new ArrayList<FootballObserver>();
private Position ballPosition = new Position();
public void registerObserver(FootballObserver observer) {
observers.add(observer);
}
public void notifyListeners() {
for(FootballObserver observer : observers) {
observer.notify(ballPosition);
}
}
public void doSomethingWithFootballPosition() {
//bounce etc
notifyListeners();
}
}
private static interface FootballObserver {
void notify(Position ball);
}
private static class Player implements FootballObserver {
public void notify(Position ball) {
System.out.println("received new ball position");
}
}
public static void main(String... args) {
FootballObserver player1 = new Player();
Ball football = new Ball();
football.registerObserver(player1);
football.doSomethingWithFootballPosition();
}
Ответ 2
Нет проблем с созданием слушателей, которые вам нужны, но вы можете применять их только к классам, которые ожидают его (так что вы не можете сделать (new Object()).addMyListener
)
Вам нужно будет добавить классы, в которых вы хотите использовать метод слушателя a addMyListener(MyListener myListener)
. Он просто хранит слушателей, которые вы передаете ему в списке для более позднего пользователя. Было бы неплохо создать интерфейс с методом addMyListener (и fireMyListeners()
).
Конечно, вы также должны предоставить код для вызова метода fireMyListeners()
. Затем fireMyListeners()
будет просто прокручивать прослушиватели и вызывать их метод уведомления.