JavaFx和@FXML中的访问修饰符

问题描述 投票:0回答:1

我是JavaFx的新手,在我看到的一些教程中,存在一些差异。在其中一本教程中,他始终使用private作为控制器类中的访问修饰符,并以此方式编写:

@FXML private Button button;

但是其他教程始终使用public,并且在控制器类中不包含@FXML。两者似乎都可以正常工作,但是我应该知道它们之间是否存在实际差异?

java javafx fxml access-modifiers
1个回答
0
投票

来自Introduction to FXML

@FXML

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

换句话说,@FXML批注仅在字段或方法是非公共的(即受保护的,程序包私有的或私有的)但仍需要FXML访问的情况下才是[[required

。在FXML的上下文中,没有(甚至没有)@FXML注释的公共字段/方法与带有所述注释的非公共字段/方法之间没有区别。通常,唯一的区别是字段/方法对其他代码的可见性。就是说,通常只允许根据需要显示某些内容,这是一种良好的做法。注入FXML的字段通常没有理由公开,事件处理程序方法也没有理由-它们是实现细节。

注意@FXML注释在语言级别上没有做任何特殊的事情。注释的存在只是告诉FXMLLoader可以尝试反射地访问该字段或方法,即使它不是公共的也可以。这也向开发人员很好地暗示了该字段或方法是由FXML处理的(例如,实际上从不应该手动初始化或重新分配FXML注入的字段)。

© www.soinside.com 2019 - 2024. All rights reserved.