@Nullable использование аннотаций



Я видел какой-то метод в java, объявленный как:



void foo(@Nullable Object obj)
{ ... }


что значит @Nullable здесь? Значит ли это, что вход может быть null?
Без аннотации вход все еще может быть нулевым, поэтому я думаю, что это не просто так?



спасибо

657   4  

4 ответов:

понятно, что метод принимает нулевые значения, и что если вы переопределяете этот метод, вы также должны принимать нулевые значения.

Он также служит подсказкой для анализаторов кода, таких как FindBugs. Например, если такой метод разыменовывает свой аргумент, не проверяя сначала значение null, FindBugs выдаст предупреждение.

эта аннотация обычно используется для устранения NullPointerExceptions. @Nullable часто говорит, что этот параметр может быть null. Хороший пример такого поведения можно найти в Google Guice. В этой облегченной структуре внедрения зависимостей вы говорите, что эта зависимость может быть null. Если вы попытаетесь пройти null и без аннотации фреймворк отказался бы выполнять свою работу.

что составляет более @Nullable может использоваться с @NotNull Примечание. Здесь вы можете найти некоторые советы, как правильно их использовать. Проверка кода в IntelliJ проверяет аннотации и помогает отлаживать код.

различные инструменты могут интерпретировать смысл @Nullable по-разному. Например,Checker Framework и FindBugs дескриптор @Nullableпо-разному.

элемент с аннотацией @Nullable утверждения нулевое значение вполне допустимо для возврата (для методов), передачи (для параметров) и удержания (для локальных переменных и полей).

элемент с аннотацией @NotNull утверждения нулевое значение запрещено возвращать (для методов), передавать (для параметров) и удерживать (для локальных переменных и полей).

существует ковариационно-контравариантная связь между @Nullable и @NotNull при переопределении / реализации методов с помощью аннотированное объявление или параметры.

переопределение / реализация методов с аннотированным объявлением:

  • The @NotNull аннотация родительского метода требует
    @NotNull аннотация для метода дочернего класса.
  • методы @Nullable аннотация в Родительском методе может иметь либо @Nullable или @NotNull аннотации в дочернем классе метод.

переопределение / реализация методов с аннотациями параметры:

  • The @Nullable аннотация параметра в Родительском методе требуется @Nullable аннотация для метода дочернего класса параметр.
  • методы @NotNull аннотация параметра в родительской метод может иметь либо @Nullable или @NotNull аннотации (или нет из них) для параметра метода дочернего класса.

пример:

@Nullable
public static UserContext getThreadUserContext() {
    TransactionParms tp = TransactionParms.getBoundParms();
    return (tp == null) ? null : tp.getUserContext();
}

здесь getThreadUserContext метод должен возвращать экземпляр TransactionParms. Но этот экземпляр может быть Null

Comments

    Ничего не найдено.