@Nullable использование аннотации
Я видел какой-то метод в Java, объявленный как:
void foo(@Nullable Object obj)
{ ... }
В чем смысл @Nullable
здесь? Означает ли это, что ввод может быть null
?
Без аннотации входные данные все еще могут быть нулевыми, так что я думаю, что не только это?
Ответы
Ответ 1
Это дает понять, что метод принимает нулевые значения и что если вы переопределите этот метод, вы также должны принять нулевые значения.
Он также служит подсказкой для анализаторов кода, таких как FindBugs. Например, если такой метод разделяет его аргумент, не проверяя сначала null, FindBugs выдаст предупреждение.
Ответ 2
Эта аннотация обычно используется для устранения NullPointerExceptions
. @Nullable
часто говорит, что этот параметр может быть null
. Хороший пример такого поведения можно найти в Google Guice. В этой облегченной структуре внедрения зависимостей вы указываете, что эта зависимость может быть null
. Если вы попытаетесь передать null
и без аннотации, инфраструктура откажется выполнять эту работу.
Больше @Nullable
может использоваться с аннотацией @NotNull
. Здесь вы можете найти несколько советов по их правильному использованию. Проверка кода в IntelliJ проверяет аннотации и помогает отлаживать код.
Ответ 3
Различные инструменты могут интерпретировать значение @Nullable
по-разному. Например, Checker Framework и FindBugs @Nullable
иначе.
Ответ 4
Элемент, аннотированный с аргументом @Nullable
, требует, чтобы значение null было верным для возврата (для методов), перехода к (для параметров) и удержания (для локальных переменных и полей).
Элемент, аннотированный с помощью @NotNull
утверждает, что null-значение запрещено возвращать (для методов), переходить к (для параметров) и удержать (для локальных переменных и полей).
Существует отношение ковариации-контравариантности между @Nullable
и @NotNull
при переопределении/реализации методов с аннотированной декларацией или параметрами.
Переопределение/реализация методов с аннотированным объявлением:
- Аннотации
@NotNull
родительского метода требуют, чтобы
@NotNull
аннотация для метода дочернего класса.
- Методы с аннотацией
@Nullable
в родительском методе могут иметь
либо @Nullable
, либо @NotNull
аннотации в дочернем классе
Метод.
Переопределяющие/реализующие методы с аннотированными параметрами:
- Аннотирование
@Nullable
параметра в родительском методе
требует аннотации @Nullable
для метода дочернего класса
параметр.
- Методы с аннотацией
@NotNull
параметра в родительском
метод может иметь аннотации @Nullable
или @NotNull
(или ни один
из них) для параметра метода дочернего класса.
Пример:
@Nullable
public static UserContext getThreadUserContext() {
TransactionParms tp = TransactionParms.getBoundParms();
return (tp == null) ? null : tp.getUserContext();
}
Здесь getThreadUserContext
метод должен возвращать экземпляр TransactionParms
. Bu этот экземпляр может быть Null