Онлайн-документация содержит параграф "Случай полей", в котором подробно описываются тонкости, связанные с доступом к полям. По сути, анализ потока может делать только точные утверждения о переменных, которые принадлежат текущей области. Локальные переменные принадлежат , принадлежащему блоку, в котором они объявлены, поля не принадлежат , принадлежащему какой-либо лексической области, и, следовательно, подвержены непредвиденным последствиям из-за любого из
- эффекты через псевдонимы
- побочные эффекты другого метода
- параллелизм
В том же тексте справки также описаны два возможных решения (если не вводить больше аннотаций, например, для указания владельца):
- присваивание локальной переменной перед обработкой
- «синтаксический анализ», который распознает ограниченный набор шаблонов, которые в нормальных условиях являются достаточно безопасными (без предоставления полных гарантий в этом случае).
Первую из этих стратегий обычно следует отдавать предпочтение, и это также то, что упомянуто в вопросе - так что с вами все будет в порядке.
Наконец, я должен упомянуть, что существует RFE для введения аннотации наподобие @LazyNonNull
, которая в основном будет сигнализировать следующее:
- Нет необходимости инициализировать такие поля во всех конструкторах.
- Следовательно, поле может быть
null
.
- Невозможно присвоить
null
такому полю.
- Следовательно, нулевая проверка по полю достаточна для принятия ненулевого значения после проверки.
Дополнительные комментарии, выражающие спрос в этих направлениях, могут помочь мотивировать инвестиции к такому решению.