Использование @Nullable в Java

У меня есть вопрос относительно использования аннотации @Nullable в Java.

Из того, что я прочитал, рекомендуется установить методы, которые могут возвращать нулевое значение. Таким образом, среда IDE может помочь обнаружить некоторые ошибки исключения нулевого указателя или предложить исключить ненужные исключения исключений нулевого указателя, если используется @NotNull.

До сих пор так хорошо, но как насчет использования @Nullable для параметров метода? Является ли это хорошей практикой или код станет еще более подробным (если используется с final), и преимущество может отсутствовать, поскольку вы не всегда знаете, какие аргументы будут переданы вызову функции? Также, каково ваше мнение об использовании @Nullable с помощью методов setter?

Использование связано с ситуацией при работе в компании, а не с небольшим проектом (например, домашним заданием).

Ответы

Ответ 1

Из-за присущей сложности анализ потока лучше всего выполняется в небольших кусках. Анализ одного метода за один раз может быть выполнен с хорошей производительностью инструмента, тогда как анализ всей системы выходит за рамки для компилятора Eclipse Java. Преимущество : анализ выполняется быстро и может выполняться постепенно, чтобы компилятор мог предупреждать вас непосредственно по мере ввода. вниз: анализ не может "видеть", какие значения (нулевые или ненулевые) текут между методами (в качестве параметров и возвращаемых значений).

Здесь используются нулевые аннотации. Указав параметр метода как @NonNull, вы можете сообщить компилятору, что вы не хотите иметь нулевое значение в этой позиции.

Ссылка

Ссылка 2

Применение: Эта ссылка объясняет, какую аннотацию использовать там.

Использование 2

Getters/Setters: Да, это возможно. Проект Lombok (http://projectlombok.org/index.html) определяет аннотации для генерации геттеров/сеттеров и многое другое.

Итак, например

@lombok.Data;
public class Person {
   private final String name;
   private int age;
}

Будет генерировать getter для имени (не setter, поскольку он является окончательным) и getter/setter для возраста. Он также генерирует equals, hashCode, toString и construtor, инициализируя необходимые поля (имя). Добавление @AllArgsConstructor будет генерировать конструктор, инициализирующий оба поля.

Существуют и другие аннотации и параметры, позволяющие вам контролировать права доступа (если ваш геттер будет защищен или открыт), имена (getName или имя?) и т.д. И есть еще. Например, мне очень нравятся методы расширения.

Ломбок очень прост в использовании. Просто загрузите банку и используйте аннотации, тогда геттер/сеттеры могут использоваться в вашем коде без фактического указания. Более того, IDE, например Netbeans, поддерживает это, так что вы видите геттер/сеттер в завершении кода, навигации и т.д. Аннотации используются только во время компиляции не во время выполнения, поэтому вы не распространяете ломбок с вашей банкой.

NotNull: это поддерживается findbugs и IdeaJ IDE, возможно, другие

Ссылка 3

Ответ 2

Для собственных небольших проектов никто не должен использовать это. Но при создании библиотек для других это может помочь пользователям API писать надежные приложения. ИМО

Как я писал в комментарии: см. использование аннотации с нулевым значением для хорошего ответа на этот конкретный вопрос.

Ответ 3

Использование @Nullable позволяет пользователю и компилятору знать, что это нормально, чтобы разрешить нулевое значение в качестве этого параметра.

Я считаю, что это более прямой способ дать пользователю возможность взглянуть на ваш API, чтобы знать, что передача null не приведет к созданию поведения NPE или undefined.

Для setter, если это поле будет использоваться во многих местах, было бы неплохо посмотреть на него setter и обнаружить, что null обрабатывается.

Говоря, я думаю, что он должен использоваться только для API или библиотек, использование их в вашем собственном коде создало бы слишком много бесполезного кода.