gpt4 book ai didi

java - 使用 时在构造函数中泄漏 'this'

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:56 25 4
gpt4 key购买 nike

Introduction to FXML有如何使用 构建自定义组件的示例。以下是文档中的一些片段:

public CustomControl() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("custom_control.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);

try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}

此处,构造函数正在泄漏可能导致 some unpleasure consequence 的“this” .

在构造函数中将“this”传递给 FXMLLoader 是否安全?如果不是,有什么建议可以使此代码安全吗?

最佳答案

考虑到示例来自 docs.oracle.com 并且他们使用它来演示功能,我认为它应该是安全的。尽管如此,你提出了一个很好的观点。

您可以做的是尽量避免同时代表根和 Controller 的类。毕竟从语义上讲,将它们分开会更好。因此,在上面的示例中,您可以将 CustomBox extends VBox for fx:rootCustomBoxController 作为 fx:controller 和将初始化负担放在 .fxml 上。

我想至少您可以对这样一个组合的自定义控件进行某种包装。然后包装器将创建控制对象,用它初始化加载器并最终加载它。如果您有超过 1 个这样的类,您可以使用相同的包装器来初始化所有自定义控件。

关于java - 使用 <fx :root> 时在构造函数中泄漏 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26439042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com