RFR: 8264770: BidirectionalBinding should use InvalidationListener to prevent boxing [v2]
Ambarish Rapte
arapte at openjdk.java.net
Mon May 17 08:39:59 UTC 2021
On Fri, 14 May 2021 22:30:16 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:
>> The internal BidirectionalBinding class implements bidirectional bindings for JavaFX properties. The design intent of this class is to provide specializations for primitive value types to prevent boxing conversions (cf. specializations of the Property class with a similar design intent).
>>
>> However, the primitive BidirectionalBinding implementations do not meet the design goal of preventing boxing conversions, because they implement ChangeListener.
>>
>> ChangeListener is a generic SAM interface, which makes it impossibe to invoke an implementation of ChangeListener::changed with a primitive value (i.e. any primitive value will be auto-boxed).
>>
>> The boxing conversion happens, as with all ChangeListeners, at the invocation site (for example, in ExpressionHelper). Since the boxing conversion has already happened by the time any of the BidirectionalBinding implementations is invoked, there's no point in using primitive specializations of BidirectionalBinding after the fact.
>>
>> This issue can be solved by having BidirectionalBinding implement InvalidationListener instead, which by itself does not incur a boxing conversion. Because bidirectional bindings are eagerly evaluated, the observable behavior remains the same.
>>
>> I've filed a bug report with the same title.
>
> Michael Strauß has updated the pull request incrementally with one additional commit since the last revision:
>
> added missing oldValue assignments
Marked as reviewed by arapte (Reviewer).
-------------
PR: https://git.openjdk.java.net/jfx/pull/454
More information about the openjfx-dev
mailing list