您好我想根据其他对象绑定一个值。此对象为null,默认情况下将设置该值。但我仍然收到NullPointerException。我希望它会被“.then(...)”捕获。但事实并非如此
relationType.bind(Bindings.when(Bindings.createBooleanBinding(() -> ( relation == null || relation.get()== null), relation))
.then(RelationType.NEUTRAL)
.otherwise(relation
.get()
.typeProperty()));
当我向Listener内容添加绑定时,一切正常:
relation.addListener((observable, oldValue, newValue) -> {
if(newValue != null) {
relationType.bind(Bindings
.when(relation.isNull())
.then(RelationType.NEUTRAL)
.otherwise(newValue.typeProperty()));
} else {
relationType.unbind();
relationType.setValue(RelationType.NEUTRAL);
}
});
但我更喜欢只有约束力。那可能吗?
答案 0 :(得分:2)
问题是评估relation.get().typeProperty()
的时间。它在创建绑定时进行评估,而不是每次relation
更改时进行评估。您可以使用选择绑定解决此问题,但您将使用此方法在控制台中收到警告:
relationType.bind(Bindings.when(relation.isNull())
.then(RelationType.NEUTRAL)
.otherwise(Bindings.select(relation, "type"));