在JavaFX SimpleObject属性中禁止null(或返回默认值)

在JavaFX SimpleObject属性中禁止null(或返回默认值),java,javafx,properties,javafx-2,Java,Javafx,Properties,Javafx 2,我有一个具有SimpleObjectProperty成员的类。我不想用任何空值检查把代码弄得乱七八糟;相反,我有一个默认的SomeFunctionInterface,唯一的方法就是空的。目前,我将这个默认值指定为属性的初始值,并且在属性上还有一个更改侦听器,如果有人试图将属性的值设置为null,它会将属性的值设置回默认实现。然而,这感觉有点笨拙,从事物的变化监听器内部设置它的值让我感觉脏兮兮的 除了创建我自己的类扩展SimpleObjectProperty,如果对象属性的当前值为null,是否有

我有一个具有
SimpleObjectProperty
成员的类。我不想用任何空值检查把代码弄得乱七八糟;相反,我有一个默认的
SomeFunctionInterface
,唯一的方法就是空的。目前,我将这个默认值指定为属性的初始值,并且在属性上还有一个更改侦听器,如果有人试图将属性的值设置为null,它会将属性的值设置回默认实现。然而,这感觉有点笨拙,从事物的变化监听器内部设置它的值让我感觉脏兮兮的


除了创建我自己的类扩展
SimpleObjectProperty
,如果对象属性的当前值为
null
,是否有任何方法可以让对象属性返回一些预定义的默认值?

您可以向属性公开非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);
    }

    // ...
}
公共类SomeBean{
私有最终ObjectProperty值=新的SimpleObjectProperty();
private final SomeFunctionInterface defaultValue=()->{};
私有最终绑定nonNullBinding=绑定。createObjectBinding(()->{
SomeFunctionInterface val=value.get();
返回val==null?默认值:val;
}(物业),;
公共最终约束价值财产(){
返回非空绑定;
}
公共功能接口getValue(){
返回valueProperty().getValue();
}
公共最终无效设置值(SomeFunctionInterface值){
valueProperty.set(值);
}
// ...
}
这并不适用于所有用例,但可能足以满足您的需要