Хороший способ иметь Слушателя Набора?

Существует ли лучший способ иметь слушателя на наборе Java, чем обертка это в классе, реализовывая шаблон "наблюдатель"?

19
задан wj. 21 December 2009 в 19:36
поделиться

4 ответа

Вы должны проверить Стеклянные списки

. Он содержит наблюдаемые классы списков, которые запускают события всякий раз, когда элементы добавляются, удаляются, заменяются и т. Д.

13
ответ дан 30 November 2019 в 04:40
поделиться

Вы можете использовать ForwardingSet , ForwardingList и т. Д. Из Guava , чтобы украсить конкретный экземпляр желаемым поведением. .

Вот моя собственная реализация, которая просто использует простые API-интерфейсы JDK:

// create an abstract class that implements this interface with blank implementations
// that way, annonymous subclasses can observe only the events they care about
public interface CollectionObserver<E> {

    public void beforeAdd(E o);

    public void afterAdd(E o);

    // other events to be observed ...

}

// this method would go in a utility class
public static <E> Collection<E> observedCollection(
    final Collection<E> collection, final CollectionObserver<E> observer) {
        return new Collection<E>() {
            public boolean add(final E o) {
                observer.beforeAdd(o);
                boolean result = collection.add(o);
                observer.afterAdd(o);
                return result;
            }

            // ... generate rest of delegate methods in Eclipse

    };
    }
6
ответ дан 30 November 2019 в 04:40
поделиться

События Apache .

«Commons-Events предоставляет дополнительные классы для запуска и обработки событий. Он фокусируется на Java Collections Framework, предоставляя декораторы для других коллекций, которые запускают события».

2
ответ дан 30 November 2019 в 04:40
поделиться

Что ж, если вам действительно не нужен экземпляр java.util.Collection или List, вы можете использовать DefaultListModel . Мне неизвестны «настоящие» реализации Collection со встроенной поддержкой слушателя / наблюдателя.

1
ответ дан 30 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

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