[英]Java Method call in anonymous classes
我对此代码有疑问(从java2s.com复制):
private TreeItem<File> createNode(final File f) {
return new TreeItem<File>(f) {
private boolean isLeaf;
private boolean isFirstTimeChildren = true;
private boolean isFirstTimeLeaf = true;
@Override
public ObservableList<TreeItem<File>> getChildren() {
super.getChildren().setAll(buildChildren(this));
return super.getChildren();
}
@Override
public boolean isLeaf() {
return isLeaf;
}
private ObservableList<TreeItem<File>> buildChildren(
TreeItem<File> TreeItem) {
File f = TreeItem.getValue();
if (f == null) {
return FXCollections.emptyObservableList();
}
if (f.isFile()) {
return FXCollections.emptyObservableList();
}
File[] files = f.listFiles();
if (files != null) {
ObservableList<TreeItem<File>> children = FXCollections
.observableArrayList();
for (File childFile : files) {
children.add(createNode(childFile));
}
return children;
}
return FXCollections.emptyObservableList();
}
};
}
@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group(), 300, 300);
VBox vbox = new VBox();
TreeItem<File> root = createNode(new File("c:/"));
TreeView treeView = new TreeView<File>(root);
vbox.getChildren().add(treeView);
((Group) scene.getRoot()).getChildren().add(vbox);
stage.setScene(scene);
stage.show();
}
}
我真的不明白为什么要例如调用“ buildChildren”方法。 因为TreeItem-anonymousclass的任何方法都没有在“启动”函数中调用。 仅调用方法“ createNode”来初始化TreeItem。
最好的问候史蒂夫
在您提供的代码中, buildChildren(..)
getChildren()
调用buildChildren(..)
getChildren()
。 由于此方法将覆盖超类的方法,因此我们可以查阅超类的JavaDoc :
public ObservableList<TreeItem<T>> getChildren()
此TreeItem的子级。 经常调用此方法,因此建议任何TreeItem实现都缓存返回的列表。
返回 :一个列表,其中包含属于TreeItem的子TreeItems。
这提供了一个事实,即代码使用的JavaFX库调用了此方法。
如果您想知道何时确切调用此方法,可以使用调试器在getChildren()
方法上设置一个断点。 在Eclipse中运行此代码时,我发现单击以在GUI中展开根TreeItem
时首先调用getChildren()
。 调试器视图显示, buildChildren()
确实由getChildren()
调用,而getChildren()
又由TreeItem
的其他代码调用:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.