在介绍EasyBind之前-
DoubleBinding contentHeight = Bindings.createDoubleBinding(
() -> getHeight() - getInsets().getTop() - getInsets().getBottom(),
heightProperty(), insetsProperty());在引入EasyBind之后-
Binding<Double> contentHeight = EasyBind.combine(
heightProperty(), insetsProperty(),
(h, i) -> h.doubleValue() - i.getTop() - i.getBottom());对于doubleValue()部分,我有点不舒服。每次我combine NumberProperty的某个子类时,EasyBind都传递Number而不是Double、Integer、.
有什么办法可以避免doubleValue()
发布于 2014-11-17 13:58:07
导致您需要调用EasyBind的不是doubleValue(),而是JavaFX API的结果。
EasyBind.combine()有一个参数列表(ObservableValue<A>, ObservableValue<B>, BiFunction<A,B,R>),并返回一个Binding<R>。对于您要传入的第一个参数,DoubleProperty。问题是DoubleProperty (有点反直觉地)实现了ObservableValue<Number>,而不是ObservableValue<Double>。combine方法对对前两个参数调用getValue()的结果调用BiFunction :也就是说,它在DoubleProperty上调用getValue(),后者返回Number,而不是Double。因此,您的BiFunction必须是BiFunction<Number, Insets, Double> (将Number和Insets映射到Double)。
您可以考虑将您的heightProperty实现为一个ObjectProperty<Double>,这将允许您省略对doubleValue()的调用;但是它可能会使应用程序的其他部分更难编码(特别是如果您有其他绑定到高度)。我不确定我是否会认为doubleValue()是一个问题。
https://stackoverflow.com/questions/26968113
复制相似问题