Helper class for maintaining lists of listeners.
Usage example:
public interface MyListener { void somethingChanged(); } public class Listenable { // Create a variant of Listeners.List private final Listeners.List< MyListener > listeners = new Listeners.SynchronizedList<>(); // Use Listeners.List.list to call registered listeners private void notifyListeners() { listeners.list.forEach( MyListener::somethingChanged ); } // expose only Listeners (not Listeners.List) to allow un/registering listeners public Listeners< MyListener > myListeners() { return listeners; } } public class Listening { public Listening( Listenable l ) { l.myListeners().add( this::notifyMe ); } void notifyMe() { System.out.println( "something changed!"); } }