Подтвердить что ты не робот

Создание пользовательских прослушивателей в 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, но это был всего лишь пример.

4b9b3361

Ответ 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() будет просто прокручивать прослушиватели и вызывать их метод уведомления.