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

Reply via email to