On Wed, 31 Aug 2022 17:19:37 GMT, Nir Lisker <nlis...@openjdk.org> wrote:

>> John Hendrikx has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Rename showing property to shown as it is already used in subclasses
>
> modules/javafx.base/src/main/java/javafx/beans/value/ObservableValue.java 
> line 274:
> 
>> 272:      * <p>
>> 273:      * Returning {@code null} from the given condition is treated the 
>> same as
>> 274:      * returning {@code false}.
> 
> I would rephrase to use the "holds" language instead of the "return":
> 
>> `{@code condition}` holding `{@code null}` is treated the same as it holding 
>> {@code false}`
> 
> But is this the behavior we want? I would consider throwing when the 
> condition is not a `true` or `false` because it's a boolean condition. 
> `orElse` can be used to create a condition that maps `null` to something else 
> if the user wants to accept `null`s in the condition. I'm not sure if this is 
> really a problem.

I've rephrased it as suggested.

As for `null` -- I've clarified here what it currently does (so it is not left 
undefined), but I have no strong feelings either way. 

I mainly choose this direction because JavaFX has so far opted to treat `null` 
as something to be ignored or converted to a default value (for 
`BooleanProperty`, you can set it to `null` using the generic setter, and it 
would become `false`).  Since the fluent system is basically built on top of 
`ObjectProperty` (and thus `Object`) we can't easily exclude the possibility of 
it being `null` (I have to accept `ObservableValue<Boolean>` instead of 
`BooleanProperty`).

ie:

     listView.layoutXProperty().setValue(null);

makes no sense at all, but JavaFX accepts it and uses `0.0`.

Ouch, just noticed it always creates (not throws) an exception (with expensive 
stacktrace) whenever you do that, despite it maybe not getting logged:

    @Override
    public void setValue(Number v) {
        if (v == null) {
            Logging.getLogger().fine("Attempt to set double property to null, 
using default value instead.", new NullPointerException());
            set(0.0);
        } else {
            set(v.doubleValue());
        }
    }

-------------

PR: https://git.openjdk.org/jfx/pull/830

Reply via email to