I suggest adding another overload for addListener method taking boolean parameter "duplicateAllowed" or "duplicateNotAllowed".
On Wed, Jan 22, 2014 at 3:00 PM, Richard Bair <richard.b...@oracle.com>wrote: > >> The default implementation (for Observable) would look like this: > >> > >> public default void ensureListener(InvalidationListener listener) { > >> removeListener(listener); > >> addListener(listener); > >> } > >> > >> subclasses might do something more effective. The same would apply to > >> ObservableValue and ChangeListener and Observable[List|Set|Map] and > >> [List|Set|Map]ChangeListener. > > > > Well this would destroy the order! I expect listeners to be called in > > the correct order not? > > That’s a good point :-( > > > Why doing a remove and not simply check if the > > listener has already been added? > > Because there is no way to check, except in the implementation. From the > Observable interface level, there is no way to a) force all implementations > of the interface to implement the method correctly (without breaking source > compatibility anyway), or b) to provide a reasonable default implementation. > > Maybe this is one of those things we can’t fix on the Observable interface > and just have to provide implementations of on our concrete properties. > > Richard