Использование Optional
s в Java не защищает от NPE, поскольку значения все еще могут быть null
:
Optional<String> myMethod() {
return null;
}
Способ защиты от этого, по крайней мере, во время выполнения — использование аннотаций @NotNull
. (Невозможно во время компиляции в Java, поскольку он не имеет ненулевых ссылок, в отличие от более сложных языков, таких как Swift и Kotlin).
Использование @NotNull
приведет к немедленному сбою при обнаружении null
, что предотвратит null
обход программы и упростит определение источников ошибок. Его лучше всего сочетать с модульными тестами, чтобы сделать его устойчивым к поломкам из-за рефакторинга.
Насколько я могу судить, всегда имеет смысл использовать @NotNull
для Optional
возвращаемых значений и параметров.
Теперь вот вопрос: возможно ли как-то заставить Java автоматически выводить @NotNull
для Optional
возвращаемых значений и параметров? т.е. Мне не нужно писать его для каждого использования, а лучше иметь такое поведение, установив какой-либо параметр сборки или аналогичный?
null
будет возвращено / получено как можно раньше. - person fabb   schedule 16.08.2018referenceOfOptional.getClass
(отбрасывая результат), и если он равен нулю, он потерпит неудачу. В противном случае, как далеко, по вашему мнению, пойдет этот код, пока кто-то не получит возможный возвращаемый типOptional
? Я не знаю, значит, вы хотели бы сделать это дляInteger
и всех других примитивов в штучной упаковке, поскольку они могут быть нулевыми? мне кажется слишком... - person Eugene   schedule 16.08.2018