Java 在这段代码中使用这些匿名块调用超类方法的原因是什么?
昨天我在下面的链接上看到了oracle站点上的组合框示例:Java 在这段代码中使用这些匿名块调用超类方法的原因是什么?,java,javafx,javafx-8,Java,Javafx,Javafx 8,昨天我在下面的链接上看到了oracle站点上的组合框示例: 在本页的“将单元格工厂应用于组合框”部分下有一个示例。在本例中,我粘贴了一个代码:- priorityComboBox.setCellFactory( new Callback<ListView<String>, ListCell<String>>() { @Override public ListCell<String> call
在本页的“将单元格工厂应用于组合框”部分下有一个示例。在本例中,我粘贴了一个代码:-
priorityComboBox.setCellFactory(
new Callback<ListView<String>, ListCell<String>>() {
@Override public ListCell<String> call(ListView<String> param) {
final ListCell<String> cell = new ListCell<String>() {
{
super.setPrefWidth(100);
}
@Override public void updateItem(String item,
boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
if (item.contains("High")) {
setTextFill(Color.RED);
}
else if (item.contains("Low")){
setTextFill(Color.GREEN);
}
else {
setTextFill(Color.BLACK);
}
}
else {
setText(null);
}
}
};
return cell;
}
});
现在我的问题是为什么他们使用匿名代码块来做这件事。他们可以将该语句放入updateItem方法中。这样做的目的是什么?
假设您可以将其插入到updateItem方法中,但每次更新项目时都会调用它 这对于setPrefWidth来说可能不是什么大问题,因为没有任何变化,但假设您有类似于
firstInitialize()的东西代码>不应该被多次调用
因此,可以使用初始值设定项块。否则,您必须在首先检查的位置添加一个变量,如bool isInitialized
,如果该变量为真,则执行操作
您还可以查看:
{
super.setPrefWidth(100);
}