Использование аннотации NotNull в аргументе метода
Я только начал использовать @NotNull
аннотация с Java 8 и получение некоторых неожиданных результатов.
у меня есть способ такой:
public List<Found> findStuff(@NotNull List<Searching> searchingList) {
... code here ...
}
Я написал тест JUnit, передающий нулевое значение для аргумента searchingList. Я ожидал, что произойдет какая-то ошибка, но она прошла так, как будто аннотации не было. Это ожидаемое поведение? Из того, что я понял, это должно было позволить вам пропустить написание шаблонной нулевой проверки код.
объяснение того, что именно @NotNull должен делать, было бы очень признательно.
4 ответа:
@Nullable
и@NotNull
ничего не делать самостоятельно. Они должны выступать в качестве инструментов документирования.The
@Nullable
Аннотация напоминает вам о необходимости введения проверки NPE, когда:
- вызов методов, которые могут возвращать значение null.
- разыменование переменных (полей, локальных переменных, параметров), которые могут быть null.
The
@NotNull
Аннотация, На самом деле, явный контракт, объявляющий следующее:
- метод не должен возвращать значение null.
- переменной (например, поля, локальные переменные и параметры) не может содержать значение null.
например, вместо написания:
/** * @param aX should not be null */ public void setX(final Object aX ) { // some code }
вы можете использовать:
public void setX(@NotNull final Object aX ) { // some code }
Так что @NotNull просто тег...Если вы хотите проверить его, то вы должны использовать что-то вроде hibernate validator jsr 303
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory(); Validator validator = validatorFactory.getValidator(); Set<ConstraintViolation<List<Searching>> violations = validator.validate(searchingList);
Как уже упоминалось выше, @NotNull ничего не делает самостоятельно. Хороший способ использования @NotNull будет использовать его с объектами.requireNonNull(..).
public class Foo { private final Bar bar; public Foo(@NotNull Bar bar) { Objects.requireNonNull(bar, "bar must not be null"); this.bar = bar; } }
сделать
@NotNull
активный вам нужен Ломбок:https://projectlombok.org/features/NonNull
import lombok.NonNull;
выполните: какую аннотацию @ NotNull Java я должен использовать?