JavaFx 和@FXML 中的访问修饰符
Access modifiers in JavaFx and @FXML
我是 JavaFx 的新手,在我看过的一些教程中,存在一些差异。在其中一个教程中,他总是在控制器class中使用private
作为访问修饰符,并这样写:
@FXML private Button button;
但是另一个教程总是使用 public 并且没有在控制器中包含 @FXML class。这两个似乎都工作正常,但我应该知道它们之间的实际区别吗?
@FXML
Note that, in the previous examples, the controller member fields and event handler methods were declared as public so they can be set or invoked by the loader. In practice, this is not often an issue, since a controller is generally only visible to the FXML loader that creates it. However, for developers who prefer more restricted visibility for controller fields or handler methods, the javafx.fxml.FXML
annotation can be used. This annotation marks a protected or private class member as accessible to FXML. If the class being annotated is in a named module, the module containing that class must open
the containing package to at least the javafx.fxml
module.
换句话说,如果字段或方法是非public(即受保护、包私有, 或 private) 但需要 FXML 可以访问。在 FXML 的上下文中,没有(甚至有)@FXML
注释的 public field/method 和非 public field/method 之间没有区别带有注释。一般来说,唯一的区别是 field/method 对其他代码的可见性。
也就是说,通常认为最好的做法是只让某些东西在需要时可见。 FXML 注入字段通常没有理由成为 public,事件处理程序方法也没有理由——它们是实现细节。
请注意,@FXML
注释在语言级别上没有做任何特殊的事情。注释的存在只是告诉 FXMLLoader
可以尝试并反射性地访问该字段或方法,即使它不是 public。这也是对开发人员的一个很好的提示,即字段或方法由 FXML 处理(例如,FXML 注入的字段实际上永远不应手动初始化或重新分配)。
我是 JavaFx 的新手,在我看过的一些教程中,存在一些差异。在其中一个教程中,他总是在控制器class中使用private
作为访问修饰符,并这样写:
@FXML private Button button;
但是另一个教程总是使用 public 并且没有在控制器中包含 @FXML class。这两个似乎都工作正常,但我应该知道它们之间的实际区别吗?
@FXML
Note that, in the previous examples, the controller member fields and event handler methods were declared as public so they can be set or invoked by the loader. In practice, this is not often an issue, since a controller is generally only visible to the FXML loader that creates it. However, for developers who prefer more restricted visibility for controller fields or handler methods, the
javafx.fxml.FXML
annotation can be used. This annotation marks a protected or private class member as accessible to FXML. If the class being annotated is in a named module, the module containing that class mustopen
the containing package to at least thejavafx.fxml
module.
换句话说,如果字段或方法是非public(即受保护、包私有, 或 private) 但需要 FXML 可以访问。在 FXML 的上下文中,没有(甚至有)@FXML
注释的 public field/method 和非 public field/method 之间没有区别带有注释。一般来说,唯一的区别是 field/method 对其他代码的可见性。
也就是说,通常认为最好的做法是只让某些东西在需要时可见。 FXML 注入字段通常没有理由成为 public,事件处理程序方法也没有理由——它们是实现细节。
请注意,@FXML
注释在语言级别上没有做任何特殊的事情。注释的存在只是告诉 FXMLLoader
可以尝试并反射性地访问该字段或方法,即使它不是 public。这也是对开发人员的一个很好的提示,即字段或方法由 FXML 处理(例如,FXML 注入的字段实际上永远不应手动初始化或重新分配)。