如何在JavaFX中绑定到常量?
我找到了像
这样的方式myObject.myIntegerProperty().bind(new IntegerBinding() {
@Override
protected int computeValue() {
return 2;
}
});
但看起来太过分了。
有短路吗?
答案 0 :(得分:1)
作为James_D pointed out:不需要创建与常量的绑定,只需使用给定值初始化属性即可。不过,我建议使用ReadOnlyIntegerProperty
来确保该属性未在其他地方修改:
public final class MyClass {
private final ReadOnlyIntegerWrapper myInteger = new ReadOnlyIntegerWrapper(2);
public int getMyInteger() {
return myInteger.get();
}
public ReadOnlyIntegerProperty myIntegerProperty() {
return myInteger.getReadOnlyProperty();
}
}
请注意,该课程应为final
according to Jonathan Giles:
杰夫弗里森有一篇关于read-only properties in JavaFX的文章。这篇文章缺乏一点清晰度,所以我有点保持沉默。最大的问题是这些方法不是最终的(尽管课程是,但我担心人们不会注意到这一点)。如果子类试图覆盖getter / setter方法并包含逻辑(因为那时有两个代码路径 - 通过setter设置和通过属性方法设置 - 并且它们不重叠,导致不是最终的方法提供了一个巨大的问题运行时的意外行为。标准规则适用 - 在创建getter / setter / property方法时,始终将它们设为最终。
答案 1 :(得分:0)
另一个选择可能是
Bindings.createIntegerBinding(() -> 2)
这将创建一个IntegerBinding,并在需要时立即求值为2。
它根本不会失效(因为没有给出依赖项),因此它将永远保持在该值。