我正在尝试创建一个绑定的BigDecimal
属性,该属性计算另外两个BigDecimal
属性,如下所示:
val caculatedProperty: ObjectProperty<BigDecimal> = objectBinding<Any, BigDecimal>(sumProperty, discountProperty) { ... }
...就像我会使用StringProperty
或IntegerProperty
一样,否则它会毫无问题地运作。但是,这次我遇到类型不匹配:它预计会ObjectProperty<BigDecimal>
,但会收到ObjectBinding<BigDecimal?>
。
这里有什么问题?我是否错误地使用了objectProperty()
方法?我应该使用其他方法来创建自定义对象的绑定吗?
编辑:
问题是我试图用ObjectProperty<BigDecimal>
覆盖父类的ObjectBinding<BigDecimal>
。在我的例子中,解决方案是创建原始的ObjectProperty<BigDecimal>
抽象,并将实现留给继承它的类。
答案 0 :(得分:0)
所有xBinding
函数都返回绑定,而不是属性。如果您考虑一下,如果计算属性可写,它将如何表现?它应该写回基础属性吗? TornadoFX实际上也支持这些代理属性,但我怀疑它并不是你所追求的。
您是否想知道为什么得到ObjectBinding<BigDecimal?>
而不是ObjectBinding<BigDecimal>
?
原因是底层属性可能为null,如果是这样,我们可能也希望从计算出的绑定中返回null。
这通常不会产生问题,该属性仍然是可观察的,并且会带有正确的计算BigDecimal
值。