[8u] API Request: RT-25613, ObservableValue should have a hasListener(listener) method

Stephen F Northover steve.x.northover at oracle.com
Wed Jan 22 09:23:14 PST 2014


If we add this API, I like addListener(InvalidationListener, boolean) 
better than ensureListener().

Steve

On 2014-01-22 8:20 AM, Ali Ebrahimi wrote:
> 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.bair at 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



More information about the openjfx-dev mailing list