Я видел какой-то метод в Java, объявленный как:
void foo(@Nullable Object obj)
{ ... }
В чем смысл @Nullable
здесь? Означает ли это, что вход может быть null
?
Без аннотации входной сигнал все еще может быть нулевым, так что я думаю, что это не только так?
java
annotations
user1508893
источник
источник
@Nullable
в контексте вашего вопроса? Это проверка?Ответы:
Это дает понять, что метод принимает нулевые значения, и что если вы переопределите метод, вам также следует принять нулевые значения.
Это также служит подсказкой для анализаторов кода, таких как FindBugs . Например, если такой метод разыменовывает свой аргумент без предварительной проверки на нулевое значение, FindBugs выдаст предупреждение.
источник
Эта аннотация обычно используется для устранения
NullPointerExceptions
.@Nullable
говорит, что этот параметр может бытьnull
. Хороший пример такого поведения можно найти в Google Guice . В этой легкой структуре внедрения зависимостей вы можете сказать, что эта зависимость может бытьnull
. Если вы попытаетесь пройтиnull
без аннотации, фреймворк откажется выполнять свою работу.Что еще
@Nullable
может быть использовано с@NotNull
аннотацией. Здесь вы можете найти несколько советов о том, как правильно их использовать. Проверка кода в IntelliJ проверяет аннотации и помогает отлаживать код.источник
Различные инструменты могут интерпретировать значение по-
@Nullable
разному. Например, Checker Framework и FindBugs обрабатывают по-@Nullable
разному .источник
Конечно, в моем мире определенно другое мышление, я не могу применить «Никогда не пропускай ноль», потому что имею дело с неконтролируемыми третьими сторонами, такими как вызывающие API, записи в базе данных, бывшие программисты и т. Д., Поэтому я параноик и защищаю подходы , Поскольку вы работаете на Java8 или более поздней версии, есть более чистый подход, чем
if
блок.Вы также можете добавить туда какое-то исключение, переключившись
.orElse
наorElseThrow(() -> new Exception("Dont' send a null"))
.Если вы не хотите использовать @Nullable, который функционально ничего не добавляет, почему бы просто не присвоить параметру имя,
mayBe...
чтобы ваше намерение было ясным.источник