API REVIEW: Weak event handler

Lubomir Nerad lubomir.nerad at oracle.com
Wed Jun 13 05:27:46 PDT 2012


Hi Sven,

in NetBeans they chose a different approach. Each weak event listener 
they create needs to hold a reference to the "source" on which it has 
been registered. First this requirement prevents it from being used with 
multiple sources and then it is prone to errors because the API allows 
to use different source during weak event handler creation and its 
registration. The nice thing is that their weak listeners handle 
everything internally and so their containers don't need to be aware 
about their existence.

If we wanted to use this approach for weak event handlers, we would 
require to provide and store more information for each event handler 
(source, eventType, isHandlerOrFilter) which would complicate weak event 
handler construction even further and increase possibilities for 
incorrect usage.

In my proposal I create only a simple weak event handler wrapper, which 
does very little work. It can be registered in the same way as any other 
event handler (even on multiple sources). But it requires its containers 
to be aware of its existence and handle it specially. Most use cases 
won't require do distinguish between EventHandler and WeakEventHandler, 
we need to have additional API for it only to provide possibility for 
adding (by external developers) new event handler containers (advanced 
use cases) which can handler weak event handlers correctly.

Thanks,
Lubo

On 6/12/2012 10:28 PM, Sven Reimers wrote:
> Ok. Here is a link to the JavaDoc how NetBeans handles this for PropertyChanges
>
> http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/WeakListeners.html
>
> I still do not understand the necessity for creating a new interface,
> it contains no additional information (API) - for the user it can only
> be used as an EventListener (assuming there will be no API explicitly
> requiring WeakEventListener)..
>
> Regards
>
> Sven
>
> On Tue, Jun 12, 2012 at 10:01 PM, Richard Bair<richard.bair at oracle.com>  wrote:
>> Hi Lubo,
>>
>>> I also considered to define the WeakEventHandler as an interface which extends EventHandler, but adds no additional methods. Then leave it to event handler containers to reference such event handlers weakly. This has very simple and direct usage, but also its own problems. We can discuss it further if you find this solution preferred to the wrapper approach.
>> Extending WeakReference and lacking the public constructor did make me a little weak in the knees :-). What were the problems with WeakEventHandler being an interface?
>>
>> Thanks!
>> Richard
>
>


More information about the openjfx-dev mailing list