在TornadoFX中,如何使用objectBinding将BigDecimal属性绑定到另一个BigDecimal属性?

时间:2017-02-07 18:59:55

标签: java javafx properties kotlin tornadofx

我正在尝试创建一个绑定的BigDecimal属性,该属性计算另外两个BigDecimal属性,如下所示:

val caculatedProperty: ObjectProperty<BigDecimal> = objectBinding<Any, BigDecimal>(sumProperty, discountProperty) { ... }

...就像我会使用StringPropertyIntegerProperty一样,否则它会毫无问题地运作。但是,这次我遇到类型不匹配:它预计会ObjectProperty<BigDecimal>,但会收到ObjectBinding<BigDecimal?>

这里有什么问题?我是否错误地使用了objectProperty()方法?我应该使用其他方法来创建自定义对象的绑定吗?

编辑:

问题是我试图用ObjectProperty<BigDecimal>覆盖父类的ObjectBinding<BigDecimal>。在我的例子中,解决方案是创建原始的ObjectProperty<BigDecimal>抽象,并将实现留给继承它的类。

1 个答案:

答案 0 :(得分:0)

所有xBinding函数都返回绑定,而不是属性。如果您考虑一下,如果计算属性可写,它将如何表现?它应该写回基础属性吗? TornadoFX实际上也支持这些代理属性,但我怀疑它并不是你所追求的。

您是否想知道为什么得到ObjectBinding<BigDecimal?>而不是ObjectBinding<BigDecimal>

原因是底层属性可能为null,如果是这样,我们可能也希望从计算出的绑定中返回null。

这通常不会产生问题,该属性仍然是可观察的,并且会带有正确的计算BigDecimal值。