gpt4 book ai didi

java - 公开绑定(bind)属性

转载 作者:行者123 更新时间:2023-11-29 09:59:45 26 4
gpt4 key购买 nike

应该如何公开属性?

例如:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com