公开绑定属性

shi*_*zou 1 java javafx properties

应该如何公开财产?

例如:

class A{
    private ObjectProperty<X> objx;
}

class B{
    private ObjectProperty<X> objy;
}
Run Code Online (Sandbox Code Playgroud)

我们希望绑定objyobjx或添加一个侦听objxB。仅仅做个吸气剂就可以了objx吗?还是有一种方法可以使包装函数绑定并公开此函数?

Jam*_*s_D 5

标准模式

class A {
    private final ObjectProperty<X> objx = new SimpleObjectProperty<>();

    public ObjectProperty<X> objxProperty() {
        return objx ;
    }

    public final X getObjx() {
        return objxProperty().get();
    }

    public final void setObjx(X objx) {
        objxProperty().set(objx);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的想法是,你必须为属性本身(“属性访问器”:存取方法objxProperty()),它可用于绑定和注册监听器,但物业也表现为一个普通的Java Bean,以及:即有标准getset方法。通常的约定是,您应该始终拥有x.getObjx() == x.objxProperty().get(),这是通过使Java Bean访问器方法(getObjx()setObjx)成为最终方法来强制执行的。

如果您希望能够在内部修改该属性,但只想公开一个只读属性(其他代码可以绑定到该属性),请使用ReadOnlyObjectWrapper

class A {

    private final ReadOnlyObjectWrapper<X> objx = new ReadOnlyObjectWrapper<>();

    public ReadOnlyObjectProperty<X> objxProperty() {
        return objx.getReadOnlyProperty();
    }

    public final X getObjx() {
        return objxProperty().get();
    }

}
Run Code Online (Sandbox Code Playgroud)

也可以看一下该powerpoint演示文稿该演示文稿虽然很旧,但显示了许多有用的习惯用法,例如属性的延迟和超延迟初始化。