@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