繁体   English   中英

将 EasyBind 与 NumberProperty 的子类一起使用

[英]Using EasyBind with subclass of NumberProperty

在介绍 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而不是DoubleInteger , ...

有什么方法可以避免doubleValue()吗?

不是 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> (将NumberInsets映射到Double )。

您可以考虑将heightProperty实现为ObjectProperty<Double> ,这将允许您省略对doubleValue()的调用; 但它可能会使您的应用程序的其他部分更难编码(特别是如果您对高度有其他绑定)。 我不确定我是否认为需要调用doubleValue()是一个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM