java cellvalue_Java:setCellValuefactory; Lambda与PropertyValueFactory; 优点缺点

小编典典

PropertyValueFactory需要正确命名的属性获取器。getAColumnsProperty可能不是一个。

在的情况下new PropertyValueFactory

LocalDate>("date")的Appointment类需要包含一个dateProperty()方法;

返回的值需要扩展ReadOnlyProperty才能正常工作,并且如果返回的对象也是,则任何编辑只会自动导致模型中的更新WritableValue。

Appointment应使用的示例类PropertyValueFactory<>("date"):

public class Appointment {

private final ObjectProperty date = new SimpleObjectProperty<>();

public final LocalDate getDate() {

return this.date.get();

}

public final void setDate(LocalDate value) {

this.date.set(value);

}

public final ObjectProperty dateProperty() {

return this.date;

}

}

如果不存在这样的方法,PropertyValueFactory则将使用getter来获取值,即getDate(),但是这种情况下,直到更新,在UI中才能看到模型中的更新Cell,因为PropertyValueFactory“不知道”在何处添加侦听器。

缺点 PropertyValueFactory

只能public在public类中找到方法

PropertyValueFactory 使用反射

不是类型安全的。在new PropertyValueFactory("date")编译器中不检查是否有合适的方法,该方法是否返回合适的类,或者例如属性getter返回a String而不是ReadOnlyProperty可以导致ClassCastExceptions的a。

没有编译时间检查。在lambda表达式中,编译器可以检查该方法是否存在并返回适当的类型。有PropertyValueFactory没有这样做。

如果您确定正确地在item类中实现适当的方法,则使用不会有任何问题PropertyValueFactory,但是如上所述,它有其缺点。此外,实施Callback更加灵活。您可以例如进行一些其他修改:

TableColumn column = ...

column.setCellValueFactory(new Callback, ObservableValue> {

@Override

public ObservableValue call(TableColumn.CellDataFeatures cd) {

Appointment a = cd.getValue();

return Bindings.createStringBinding(() -> "the year: " + a.getDate().getYear(), a.dateProperty());

}

});

2020-09-28

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值