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

In TornadoFX, how can I bind BigDecimal properites to another BigDecimal property using objectBinding?

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

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

...就像我对 StringPropertyIntegerProperty 所做的那样,否则它可以正常工作。然而,这次我得到了一个类型不匹配:它期望 ObjectProperty<BigDecimal>,但收到 ObjectBinding<BigDecimal?>.

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

编辑:

问题是我试图用 ObjectBinding<BigDecimal> 覆盖父 class 的 ObjectProperty<BigDecimal>。就我而言,解决方案是将原始 ObjectProperty<BigDecimal> 抽象化,并将实现留给继承它的 classes。

所有 xBinding 函数 returns 绑定,而不是属性。如果您考虑一下,如果计算出的 属性 是可写的,它会如何表现?它是否应该写回底层属性? TornadoFX 实际上也支持这些类型的代理属性,但我怀疑这不是您想要的。

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

原因是基础 属性 可能为空,如果是这样,我们可能希望从计算的绑定中也 return 为空。

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