Я только начал использовать @NotNull
аннотацию с Java 8 и получил некоторые неожиданные результаты.
У меня есть такой метод:
public List<Found> findStuff(@NotNull List<Searching> searchingList) {
... code here ...
}
Я написал тест JUnit, передав нулевое значение для аргумента searchList. Я ожидал, что произойдет какая-то ошибка, но она прошла, как будто аннотации не было. Это ожидаемое поведение? Из того, что я понял, это должно было позволить вам пропустить написание стандартного кода проверки на ноль.
Объяснение того, что именно должен делать @NotNull, будет с благодарностью.
@NotNull
это просто аннотация. Аннотации ничего не делают сами по себе. Им нужен процессор аннотаций во время компиляции или что-то, что обрабатывает его во время выполнения.Ответы:
@Nullable
и@NotNull
ничего не делать самостоятельно. Они должны выступать в качестве инструментов документации.@Nullable
Аннотация напоминает вам о необходимости ввести проверку NPE , когда:@NotNull
Аннотаций, собственно, явный контракт объявив следующее:неможет содержать нулевое значение.Например, вместо того, чтобы писать:
Ты можешь использовать:
Кроме того,
@NotNull
часто проверяется ConstraintValidators (например, весной и в спящем режиме).Сама
@NotNull
аннотация не выполняет никакой проверки, потому что определение аннотации не предоставляет никакойConstraintValidator
ссылки на тип.Для получения дополнительной информации см .:
источник
Optional
можно было бы использовать вместо@Null
возвращаемых значений и перегрузку метода вместо@Null
списков параметров: dolszewski.com/java/java-8-optional-use-cases* The annotated element must not be {@code null}. * Accepts any type.
и я думаю , что обязательно слово должно быть заменено должно , но опять же это зависит от того, как вы читаете это. Определенно, было бы неплохо дать еще некоторые разъясненияnull
но это будет разрешено, вы используете аннотацию неправильно. Термин не означает, что он подтвержден. Однако намек на то, что он не подтвержден, не повредит. Если вы хотите добавить автоматическую проверку, вы можете использовать некоторые внешние инструменты. Например, IntelliJ IDE имеет встроенную поддержку для вставки нулевых проверок.Как уже упоминалось выше,
@NotNull
ничего не делает само по себе. Хороший способ использования@NotNull
будет использовать его сObjects.requireNonNull
источник
this.bar = Objects.requireNonNull(bar, "bar must not be null");
Для
@NotNull
активности вам нужен Ломбок:https://projectlombok.org/features/NonNull
Следуйте: какую аннотацию @NotNull Java следует использовать?
источник
SO @NotNull - это просто тег ... Если вы хотите проверить его, вы должны использовать что-то вроде hibernate validator jsr 303
источник
Если вы используете Spring, вы можете форсировать проверку, пометив класс с помощью
@Validated
:Более подробная информация доступна здесь: Javax validation @NotNull аннотации использования
источник
Я делаю это для создания моей собственной аннотации валидации и валидатора:
ValidCardType.java
(аннотация для размещения на методах / полях)И валидатор для запуска проверки
CardTypeValidator.java
:Вы можете сделать что-то очень похожее, чтобы проверить
@NotNull
.источник
Чтобы проверить валидацию вашего метода в тесте, вы должны заключить его в прокси в методе @Before.
С MethodValidationProxyFactory как:
}
А затем добавьте свой тест:
источник