在 JavaFX SimpleObjectProperty 中禁止空值(或 return 默认值)

Forbid null (or return default value) in JavaFX SimpleObjectProperty

我有一个 class 和一个 SimpleObjectProperty<SomeFunctionalInterface> 成员。我不想用任何空值检查来弄乱我的代码;相反,我有一个 SomeFunctionalInterface 的默认实现,它的唯一方法就是空的。目前,我将此默认值指定为 属性 的初始值,并且还在 属性 上设置了一个更改侦听器,它将 属性 的值设置回默认实现如果有人试图将其值设置为 null。然而,这感觉有点笨拙,而且从它的更改侦听器内部设置一个东西的值让我觉得很脏。

除了创建我自己的 class 扩展 SimpleObjectProperty 之外,如果对象的当前值为null?

您可以将非空绑定公开到 属性:

public class SomeBean {

    private final ObjectProperty<SomeFunctionalInterface> value = new SimpleObjectProperty<>();

    private final SomeFunctionalInterface defaultValue = () -> {} ;

    private final Binding<SomeFunctionalInterface> nonNullBinding = Bindings.createObjectBinding(() -> {
        SomeFunctionalInterface val = value.get();
        return val == null ? defaultValue : val ;
    }, property);

    public final Binding<SomeFunctionalInterface> valueProperty() {
        return nonNullBinding ;
    }

    public final SomeFunctionalInterface getValue() {
        return valueProperty().getValue();
    }

    public final void setValue(SomeFunctionalInterface value) {
        valueProperty.set(value);
    }

    // ...
}

这不适用于所有用例,但可能足以满足您的需要。