Module is.codion.common.reactive
Class DefaultObserver<T>
java.lang.Object
is.codion.common.reactive.observer.DefaultObserver<T>
- All Implemented Interfaces:
Observer<T>
Thread-safe implementation of Observer.
All listener management operations are synchronized using an internal lock.
Dead weak references are cleaned up during add/remove operations.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal booleanaddConsumer(Consumer<? super T> consumer) Addsconsumerto thisObserver.final booleanaddListener(Runnable runnable) Addslistenerto thisObserver.final booleanaddWeakConsumer(Consumer<? super T> consumer) Uses aWeakReference, addingconsumerdoes not prevent it from being garbage collected.final booleanaddWeakListener(Runnable runnable) Uses aWeakReference, addinglistenerdoes not prevent it from being garbage collected.protected final voidnotifyListeners(@Nullable T data) Notifies all consumers and listenersfinal booleanremoveConsumer(Consumer<? super T> consumer) Removesconsumerfrom thisObserverfinal booleanremoveListener(Runnable runnable) Removeslistenerfrom thisObserverfinal booleanremoveWeakConsumer(Consumer<? super T> consumer) Removesconsumerfrom thisObserver.final booleanremoveWeakListener(Runnable runnable) Removeslistenerfrom thisObserverReturns a new conditionalObservernotified when this observer instance is triggered with the given valueReturns a new conditionalObservernotified when this observer instance is triggered with a value satisfying the given predicate
-
Constructor Details
-
DefaultObserver
protected DefaultObserver()Instantiates a newDefaultObserver
-
-
Method Details
-
addListener
Description copied from interface:ObserverAddslistenerto thisObserver. Adding the same listener a second time has no effect.- Specified by:
addListenerin interfaceObserver<T>- Parameters:
runnable- the listener to add- Returns:
- true if this observer did not already contain the specified listener
-
removeListener
Description copied from interface:ObserverRemoveslistenerfrom thisObserver- Specified by:
removeListenerin interfaceObserver<T>- Parameters:
runnable- the listener to remove- Returns:
- true if this observer contained the specified listener
-
addConsumer
Description copied from interface:ObserverAddsconsumerto thisObserver. Adding the same consumer a second time has no effect.- Specified by:
addConsumerin interfaceObserver<T>- Parameters:
consumer- the consumer to add- Returns:
- true if this observer did not already contain the specified consumer
-
removeConsumer
Description copied from interface:ObserverRemovesconsumerfrom thisObserver- Specified by:
removeConsumerin interfaceObserver<T>- Parameters:
consumer- the consumer to remove- Returns:
- true if this observer contained the specified consumer
-
addWeakListener
Description copied from interface:ObserverUses aWeakReference, addinglistenerdoes not prevent it from being garbage collected. Adding the same listener a second time has no effect.Note: Dead weak references accumulate until cleaned up, which happens automatically when listeners are added or removed. To trigger cleanup manually without modifying the listener set, call
Observer.removeWeakListener(Runnable)with any non-existing listener:// Clean up dead weak references observer.removeWeakListener(() -> {});- Specified by:
addWeakListenerin interfaceObserver<T>- Parameters:
runnable- the listener- Returns:
- true if this observer did not already contain the specified listener
-
removeWeakListener
Description copied from interface:ObserverRemoveslistenerfrom thisObserver- Specified by:
removeWeakListenerin interfaceObserver<T>- Parameters:
runnable- the listener to remove- Returns:
- true if this observer contained the specified listener
-
addWeakConsumer
Description copied from interface:ObserverUses aWeakReference, addingconsumerdoes not prevent it from being garbage collected. Adding the same consumer a second time has no effect.Note: Dead weak references accumulate until cleaned up, which happens automatically when listeners are added or removed. To trigger cleanup manually without modifying the listener set, call
Observer.removeWeakConsumer(Consumer)with any non-existing consumer:// Clean up dead weak references observer.removeWeakConsumer(data -> {});- Specified by:
addWeakConsumerin interfaceObserver<T>- Parameters:
consumer- the consumer- Returns:
- true if this observer did not already contain the specified consumer
-
removeWeakConsumer
Description copied from interface:ObserverRemovesconsumerfrom thisObserver.- Specified by:
removeWeakConsumerin interfaceObserver<T>- Parameters:
consumer- the consumer to remove- Returns:
- true if this observer contained the specified consumer
-
when
Description copied from interface:ObserverReturns a new conditionalObservernotified when this observer instance is triggered with the given value -
when
Description copied from interface:ObserverReturns a new conditionalObservernotified when this observer instance is triggered with a value satisfying the given predicate -
notifyListeners
Notifies all consumers and listeners- Parameters:
data- the data to propagate to consumers
-