Не аннотированный метод переопределяет метод, аннотированный с помощью @notnull

Я реализую настраиваемую структуру данных, которая дает мне некоторые свойства множеств и другие свойства списков. Однако для большинства реализованных методов я получаю это странное предупреждение в IntelliJ IDEA на Java 7:

Not annotated method overrides method annotated with @NotNull

РЕДАКТИРОВАТЬ. Код ниже не относится к проблеме, но является частью исходного вопроса. Это предупреждение показывает из-за ошибки в IntelliJ. См. Ответ , чтобы (надеюсь) решить вашу проблему.


Мне не удалось найти что-то важное в этом вопросе, и я не уверен, что на самом деле я пропускаю какую-то проверку, но я просмотрел источник как ArrayList, так и интерфейс List, Посмотрите, что такое предупреждение. Это на каждом реализованном методе, который ссылается на поле списка. Вот фрагмент класса, который я сделал:

public class ListHashSet<T> implements List<T>, Set<T> {
private ArrayList<T> list;
private HashSet<T> set;


/**
 * Constructs a new, empty list hash set with the specified initial
 * capacity and load factor.
 *
 * @param      initialCapacity the initial capacity of the list hash set
 * @param      loadFactor      the load factor of the list hash set
 * @throws     IllegalArgumentException  if the initial capacity is less
 *               than zero, or if the load factor is nonpositive
 */
public ListHashSet(int initialCapacity, float loadFactor) {
    set = new HashSet<>(initialCapacity, loadFactor);
    list = new ArrayList<>(initialCapacity);
}
...
/**
 * The Object array representation of this collection
 * @return an Object array in insertion order
 */
@Override
public Object[] toArray() {  // warning is on this line for the toArray() method
    return list.toArray();
}

EDIT: У меня есть следующие дополнительные конструкторы в классе:

public ListHashSet(int initialCapacity) {
    this(initialCapacity, .75f);
}

public ListHashSet() {
    this(16, .75f);
}

Ответы

Ответ 1

Попробуйте добавить @Nonnull (javax.annotation.Nonnull) к методу toArray.

Предупреждение исчезло, когда я добавил эту аннотацию. Я думаю, что предупреждающее сообщение неверно, в котором говорится, что @NotNull отсутствует.

Ответ 2

Попробуйте добавить:

private ListHashSet() {}

Ответ 3

Я согласен, что это опечатка на Nonnull против NotNull. Однако, похоже, также происходит некоторая другая ошибка. Я реализовал пользовательский набор, и он жаловался на методы Iterator и toArray, не содержащие аннотации. Но, глядя на JDK, на интерфейсе для Set или Collection нет такой аннотации.

http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/0eb62e4a75e6/src/share/classes/java/util/Set.java http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/0eb62e4a75e6/src/share/classes/java/util/Collection.java

Weird.

В любом случае, другой вариант заключается в добавлении тега @SuppressWarnings к вашему классу или методу: @SuppressWarnings ( "NullableProblems" )