API REVIEW: Weak event handler
Richard Bair
richard.bair at oracle.com
Tue Jun 19 11:49:02 PDT 2012
So I talked to Jasper, and I like this later approach.
Thanks
Richard
PS> Possibly it could implement WeakListener as well, though that forms a new relation between javafx-common and javafx-beans, though for all practical purposes no JavaFX app can exist without javafx-beans anyway.
On Jun 15, 2012, at 6:36 AM, John Hendrikx wrote:
> I can't speak for Richard, but this looks very much in line with the existing WeakChangeListener and WeakInvalidationListener -- I think it's good to do this one in a similar fashion for consistency.
>
> --John
>
> On 15/06/2012 12:38, Lubomir Nerad wrote:
>> Hi Richard,
>>
>> haven't got any answer from you. I would like to make some progress with this, so here is an updated WeakEventHandler, which should be more to your liking:
>>
>> public final class WeakEventHandler<T extends Event>
>> implements EventHandler<T> {
>> public WeakEventHandler(EventHandler<T> eventHandler) { ... }
>>
>> public boolean wasGarbageCollected() { ... }
>>
>> @Override public void handle(T event) { ... }
>> }
>>
>> I removed WeakReference and the factory method, added the additional test method (as in WeakListener) and the public constructor.
>>
>> Is it OK now?
>>
>> Thanks,
>> Lubo
>>
>> On 6/13/2012 12:57 PM, Lubomir Nerad wrote:
>>> Hi Richard,
>>>
>>> On 6/12/2012 10:01 PM, Richard Bair 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 :-).
>>>
>>> Well, we can of course remove WeakReference from extends and have it as an instance in WeakEventHandler. But then we need to add some method to test whether the target handler has been garbage collected and will have one more instance for each created WeakEventHandler. So extending WeakReference seemed to me worth considering. On the other hand having additional test method is more consistent with Weak*Listener from javafx-beans so we will probably end up with it. As to the public constructor, I don't like having both (the factory method and constructor) and in this case the factory method seems to be easier to use.
>>>
>>>> What were the problems with WeakEventHandler being an interface?
>>>>
>>>
>>> When somebody wants to register a single event handler weakly multiple times, in the case of WeakEventHandler as a wrapper (the first case), he needs only to create a single instance of it and register it multiple types. In the case of WeakEventHandler as a marker (the second case), each time he registers such event handler a new instance of weak reference needs to be created by the container for it. Also if such weak event handler is set to an event handler property (for example Node.setOnMousePressed), the property implementation needs to be ready for it and create a weak reference to it. Then when such event handler is finally garbage collected, the property needs to return null and ideally at the point of garbage collection it should notify its listeners (if any) about value change.
>>>
>>>> Thanks!
>>>> Richard
>>>
>>> Lubo
>>>
>>
>
More information about the openjfx-dev
mailing list