java - 公开绑定(bind)属性

标签 java javafx properties

应该如何公开属性?

例如:

class A{
    private ObjectProperty<X> objx;
}

class B{
    private ObjectProperty<X> objy;
}

我们想将 objy 绑定(bind)到 objx 或者从 B 添加一个监听器到 objx。只为 objx 做一个 getter 可以吗?或者有没有办法制作一个用于绑定(bind)的包装函数并仅公开此函数?

最佳答案

standard pattern

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);
    }
}

这里的想法是你有一个属性本身的访问器方法(一个“属性访问器”:objxProperty()),它可以用于绑定(bind)和注册监听器,但属性也会出现作为常规Java Bean还有:即有标准的 getset 方法。一般约定是您应该始终拥有 x.getObjx() == x.objxProperty().get(),这是通过使 Java Bean 访问器方法(getObjx() setObjx) 最后。

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

class A {

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

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

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

}

另请查看 this powerpoint presentation虽然很旧,但显示了很多有用的习语,例如属性的延迟和 super 延迟初始化。

关于java - 公开绑定(bind)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39349849/

相关文章:

java - 让文本转语音工作并将其连接到 java

JavaFX TabPane 选项卡模糊

java - JavaFX 中的选择边框。想要使用 CSS 更改默认行为

WPF触发器属性

java - 如何在对象的 JSON 属性中排除(在输出类内部)?

java - 我应该使用什么格式化程序模式从数字 '00123' 和 '00001' 相应地获取 '123' 、 '1' 字符串?

java - 迭代对象的自定义 LinkedList 类

java - 如何递归计算数字的平均值

Java 相当于 QT 中的信号和槽

html - img 元素上的 HTML 宽度/高度属性和 CSS 宽度/高度属性有什么区别?