Модификаторы доступа в JavaFx и @FXML - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в JavaFx, и в нескольких уроках, которые я видел, были некоторые различия. В одном из руководств он всегда использовал private в качестве модификатора доступа в классе контроллера и писал его так:

@FXML private Button button;

Но в другом учебнике всегда использовался publi c и не включил @ F XML в класс контроллера. Кажется, что оба они работают нормально, но есть ли реальная разница между ними, которую я должен знать?

1 Ответ

2 голосов
/ 05 апреля 2020

С Введение в F XML:

@FXML

Обратите внимание, что в предыдущих примерах поля элементов контроллера и обработчик событий методы были объявлены как publi c, поэтому они могут быть установлены или вызваны загрузчиком. На практике это не часто является проблемой, поскольку контроллер обычно виден только загрузчику F XML, который его создает. Однако для разработчиков, которые предпочитают более ограниченную видимость полей контроллера или методов-обработчиков, можно использовать аннотацию javafx.fxml.FXML. Эта аннотация помечает защищенного или частного члена класса как доступный для F XML. Если аннотируемый класс находится в именованном модуле, модуль, содержащий этот класс, должен open содержащий пакет по крайней мере для модуля javafx.fxml.

Другими словами, аннотация @FXML только требуется , если поле или метод не является общедоступным c (т. е. защищенным, закрытым или закрытым), но должен быть доступен для F XML. В контексте F XML нет никакой разницы между полем c или методом publi * без (или даже с) @FXML аннотацией и полем / методом c не публикуемым способом с указанной аннотацией. Единственное отличие в общем случае заключается в видимости поля / метода для другого кода.

При этом обычно считается хорошей практикой делать что-то настолько видимым, насколько это необходимо. В поле, введенном F XML, обычно нет причин для публикации c, а также метод обработчика событий - это детали реализации.

Обратите внимание, что аннотация @FXML ничего не делает особенный на уровне языка. Наличие аннотации просто говорит FXMLLoader, что можно попытаться рефлексивно получить доступ к полю или методу, даже если он не опубликован c. Это также хороший совет для разработчика, что поле или метод обрабатывается F XML (например, F XML -инжированные поля практически никогда не должны инициализироваться или переназначаться вручную).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...