JavaFx和@FXML中的访问修饰符

JavaFx和@FXML中的访问修饰符,java,javafx,fxml,access-modifiers,Java,Javafx,Fxml,Access Modifiers,我是JavaFx新手,在我看过的一些教程中,有一些不同之处。在其中一个教程中,他总是使用private作为控制器类中的访问修饰符,并这样编写: @FXML私有按钮 但是另一个教程总是使用public,并且在controller类中不包含@FXML。这两种方法似乎都很好,但我应该知道它们之间有什么实际的区别吗?来自: @FXML 请注意,在前面的示例中,控制器成员字段和事件处理程序方法被声明为public,以便加载程序可以设置或调用它们。实际上,这通常不是问题,因为控制器通常只对创建它的FXML加

我是JavaFx新手,在我看过的一些教程中,有一些不同之处。在其中一个教程中,他总是使用
private
作为控制器类中的访问修饰符,并这样编写:

@FXML私有按钮

但是另一个教程总是使用public,并且在controller类中不包含@FXML。这两种方法似乎都很好,但我应该知道它们之间有什么实际的区别吗?

来自:

@FXML
请注意,在前面的示例中,控制器成员字段和事件处理程序方法被声明为public,以便加载程序可以设置或调用它们。实际上,这通常不是问题,因为控制器通常只对创建它的FXML加载程序可见。但是,对于希望控制器字段或处理程序方法的可见性更有限的开发人员,可以使用
javafx.fxml.fxml
注释。此批注将受保护或私有类成员标记为FXML可以访问。如果要注释的类位于命名模块中,则包含该类的模块必须
打开包含该类的包,至少打开
javafx.fxml
模块

换句话说,
@FXML
注释仅在字段或方法为非公共(即受保护、包私有或私有)但FXML需要访问时才需要。在FXML的上下文中,没有(甚至有)注释的公共字段/方法与具有所述注释的非公共字段/方法之间没有区别。通常唯一的区别是字段/方法对其他代码的可见性

这就是说,通常认为最好的做法是只让某个东西看起来像它需要的那样可见。FXML注入字段通常没有公开的理由,事件处理程序方法也没有公开的理由。它们是实现细节

请注意,
@FXML
注释在语言级别上没有任何特殊功能。注释的存在只是告诉
fxmloader
可以尝试反射式访问字段或方法,即使它不是公共的。对于开发人员来说,这也是一个很好的提示,字段或方法是由FXML处理的(例如,FXML注入的字段实际上不应该手动初始化或重新分配)。

来自:

@FXML
请注意,在前面的示例中,控制器成员字段和事件处理程序方法被声明为public,以便加载程序可以设置或调用它们。实际上,这通常不是问题,因为控制器通常只对创建它的FXML加载程序可见。但是,对于希望控制器字段或处理程序方法的可见性更有限的开发人员,可以使用
javafx.fxml.fxml
注释。此批注将受保护或私有类成员标记为FXML可以访问。如果要注释的类位于命名模块中,则包含该类的模块必须
打开包含该类的包,至少打开
javafx.fxml
模块

换句话说,
@FXML
注释仅在字段或方法为非公共(即受保护、包私有或私有)但FXML需要访问时才需要。在FXML的上下文中,没有(甚至有)注释的公共字段/方法与具有所述注释的非公共字段/方法之间没有区别。通常唯一的区别是字段/方法对其他代码的可见性

这就是说,通常认为最好的做法是只让某个东西看起来像它需要的那样可见。FXML注入字段通常没有公开的理由,事件处理程序方法也没有公开的理由。它们是实现细节


请注意,
@FXML
注释在语言级别上没有任何特殊功能。注释的存在只是告诉
fxmloader
可以尝试反射式访问字段或方法,即使它不是公共的。对于开发人员来说,这也是一个很好的提示,字段或方法是由FXML处理的(例如,FXML注入的字段实际上永远不应该手动初始化或重新分配)。

您熟悉公共和私有字段之间的区别吗?我怀疑如果没有@FXML注释,您将无法初始化私有成员,将成员设置为私有是一种很好的做法。您熟悉公共成员和私有成员之间的区别吗?我怀疑,如果没有@FXML注释,您将无法初始化私有成员,将成员设置为私有是一种很好的做法。