API REVIEW: Weak event handler
John Hendrikx
hjohn at xs4all.nl
Tue Jun 12 20:59:06 PDT 2012
This seems to be significantly different from how
WeakInvalidationListener and WeakChangeListener are implemented, should
they not be the same?
On 12/06/2012 13:47, Lubomir Nerad wrote:
> Hi All,
>
> there is a request to add a WeakEventHandler to the API
> (http://javafx-jira.kenai.com/browse/RT-13706). This will be a simple
> wrapper for the target event handler to which it will delegate the
> handle calls. It will reference the target weakly and so it won't
> prevent it from being garbage collected.
>
> My proposal for this class is:
>
> package javafx.event;
>
> public final class WeakEventHandler<T extends Event>
> extends WeakReference<EventHandler<T>>
> implements EventHandler<T> {
>
> private WeakEventHandler(EventHandler<T> eventHandler) { ... }
>
> @Override public void handle(final T event) { ... }
>
> public static <T extends Event> WeakEventHandler<T>
> create(EventHandler<T> eventHandler) { ... }
> }
>
> I decided to make this class both an EventHandler (implements) and a
> WeakReference (extends). Mainly I needed to have some way how to test
> from event handler containers whether the target event handler for a
> stored wrapper has been garbage collected and so the wrapper can be
> removed as well. Extending WeakReference adds the required method
> (WeakReference.get()) and saves some object instances. It also brings
> the clear method, which can simplify testing of this feature.
>
> WeakEventHandler instances will be created through the create factory
> method. This is to avoid repetition of the event type during event
> handler registration.
>
> So instead of:
> node.setOnMousePressed(new WeakEventHandler<MouseEvent>(new
> EventHandler<MouseEvent>() { ... }));
>
> we can use:
> node.setOnMousePressed(WeakEventHandler.create(new
> EventHandler<MouseEvent>() { ... }));
>
> 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.
>
> Thanks,
> Lubo
>
More information about the openjfx-dev
mailing list