Helper class for maintaining lists of listeners.
Usage example:
publicinterfaceMyListener{voidsomethingChanged()} publicclassListenable{// Create a variant of Listeners.ListprivatefinalListeners.List< MyListener > listeners = newListeners.SynchronizedList<>(); // Use Listeners.List.list to call registered listenersprivatevoidnotifyListeners(){listeners.list.forEach( MyListener::somethingChanged )} // expose only Listeners (not Listeners.List) to allow un/registering listenerspublicListeners< MyListener > myListeners(){returnlisteners} } publicclassListening{publicListening( Listenablel ){l.myListeners().add( this::notifyMe )} voidnotifyMe(){System.out.println( "something changed!")} }