首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用EasyBind和NumberProperty子类

使用EasyBind和NumberProperty子类
EN

Stack Overflow用户
提问于 2014-11-17 08:07:27
回答 1查看 142关注 0票数 0

在介绍EasyBind之前-

代码语言:javascript
复制
DoubleBinding contentHeight = Bindings.createDoubleBinding(
    () -> getHeight() - getInsets().getTop() - getInsets().getBottom(),
    heightProperty(), insetsProperty());

在引入EasyBind之后-

代码语言:javascript
复制
Binding<Double> contentHeight = EasyBind.combine(
    heightProperty(), insetsProperty(),
    (h, i) -> h.doubleValue() - i.getTop() - i.getBottom());

对于doubleValue()部分,我有点不舒服。每次我combine NumberProperty的某个子类时,EasyBind都传递Number而不是DoubleInteger、.

有什么办法可以避免doubleValue()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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> (将NumberInsets映射到Double)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26968113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档