Как использовать NonNullByDefault для пакета

Мой компилятор предупреждает меня о A default nullness annotation has not been specified for the package. Я использую Juno с Java 7.

Статистика документации вы должны добавить @NonNullByDefault в качестве опции пакета, но я не знаю, что это значит.

Можно ли как-то установить NonNullByDefault для всего пакета? В Eclipse я не могу щелкнуть правой кнопкой мыши по пакету и сказать add option или что-то подобное.

Или я просто добавляю @NonNullByDefault к любому классу в пакете, а затем он действителен для всех beans в этом пакете? Или мне нужно создать некоторый метаинформационный файл в pakage для добавления опций пакета? Я должен быть слепым, потому что я не могу найти какую-либо помощь в Интернете....

Небольшой пример будет большим.

Ответы

Ответ 1

Резюме:
Получение вышеуказанного совета для работы не было интуитивным для меня. Я также не понял фактическое решение. В файле package-info.java:
 а. поместить аннотацию ВЫШЕ объявить пакет
 б. введите импорт аннотации NonNullByDefault ПОСЛЕ объявления пакета


Детали:
Я не знаю, являюсь ли я единственным человеком, который прочитал вышеупомянутые ответы и не мог понять, как это сделать. Поэтому, чтобы быть более ясным, здесь (неочевидные или интуитивные) шаги, которые я предпринял, чтобы заставить это, наконец, работать в Eclipse-Juno:

  • В Проводнике пакетов перейдите к корневому пакету Java, в котором отображается сообщение с предупреждением (или ошибкой), начинающееся с " Аннотации аннулирования по умолчанию для пакета не указаны..." - для этого примера, предположим, что имя пакета "org.public_domain"
  • В пакете Java активируйте меню правой кнопки мыши и выберите опцию " Новый → Пакет" - да, я знаю, что ваш пакет уже существует, рассмотрите его как eclipse idiosyncrasy - он не собирается сделать что-либо с вашим существующим пакетом.
  • Когда появится диалоговое окно " Новый Java-пакет", установите флажок " Создать package-info.java" и нажмите "Готово"
  • Теперь у вашего редактора Java будет новый файл под названием " package-info.java" со следующим содержимым:

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    package org.public_domain;
    
  • Теперь измените содержимое файла таким образом:

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    @NonNullByDefault  
    package org.public_domain;  
    import org.eclipse.jdt.annotation.NonNullByDefault;
    

    ... или вот так...

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    @org.eclipse.jdt.annotation.NonNullByDefault
    package org.public_domain;  
    
  • Наслаждайтесь удивительностью, которая является eclipse @NonNullByDefault

Моя задача заключалась в том, что я должен был поместить аннотацию ВЫШЕ объявить пакет. И чтобы поместить комментарий аннотации NonNullByDefault ПОСЛЕ объявления пакета. Для меня это было неинтуитивно.

Надеюсь, это спасет кого-то еще, когда я закончил гореть, преследуя этот конкретный путь.

Ответ 2

Если вы просто хотите избавиться от предупреждения и игнорировать эту функцию, потому что вы ее не используете, вы можете просто отключить ее в настройках Eclipse:

Окно > Настройки > Java > Компилятоp > Ошибки/Предупреждения > Нулевой анализ > Отсутствует аннотация @NonNullByDefault на упаковке = [Игнорировать]

Ответ 3

Смотрите исходный код или JavaDocs:

Note that for applying an annotation to a package a file by the name
package-info.java is used.

и

@Target({PACKAGE,TYPE,METHOD,CONSTRUCTOR})