Javafx 2 为什么需要在updateIrem()方法中判断'item==null | | empty'

Javafx 2 为什么需要在updateIrem()方法中判断'item==null | | empty',javafx-2,javafx-8,Javafx 2,Javafx 8,为什么需要在updateIrem()方法中判断item==null | | empty table.setRowFactory(行->新表行(){ @凌驾 public void updateItem(个人项目,布尔值为空){ super.updateItem(项,空); 如果(项==null | |空){ }否则{ if(item.getFirstName().equals(“Jacob”)){ 设置样式(“-fx背景色:黄色”); } } } }); 当UI决定需要更新项目时,会调用此方法。

为什么需要在updateIrem()方法中判断
item==null | | empty

table.setRowFactory(行->新表行(){
@凌驾
public void updateItem(个人项目,布尔值为空){
super.updateItem(项,空);
如果(项==null | |空){
}否则{
if(item.getFirstName().equals(“Jacob”)){
设置样式(“-fx背景色:黄色”);
}
}
}
});

当UI决定需要更新项目时,会调用此方法。
empty
参数是UI告诉您单元格是否应为空的方式。请参阅该方法的javaDoc:

我们测试
empty
条件,如果为true,则 将文本和图形属性设置为null。如果我们不这样做, 几乎可以保证最终用户将看到图形工件 意外地被关在牢房里

具体而言,
empty
参数描述为:

@参数为空,无论此单元格是否表示列表中的数据。如果是 为空,则它不表示任何域数据,而是一个单元格 用于呈现“空”行


为什么我们不能仅仅依赖于组件创建者的实现决策,如果您需要确切了解,请尝试深入组件的源代码。

item==null
需要防止NullPointerException
table.setRowFactory(row -> new TableRow<Person>() {
        @Override
        public void updateItem(Person item, boolean empty) {
            super.updateItem(item, empty);
            if (item == null || empty) {

            } else {
                if (item.getFirstName().equals("Jacob")) {
                    setStyle("-fx-background-color: yellow");
                }
            }
        }
    });