не аннотированный метод переопределяет метод, аннотированный @notnull
я реализую пользовательскую структуру данных, которая дает мне некоторые свойства наборов и других свойств списков. Для большинства реализованных методов я получаю это странное предупреждение в IntelliJ IDEA на Java 7:
Not annotated method overrides method annotated with @NotNull
редактировать: приведенный ниже код не имеет отношения к проблеме, но является частью исходного вопроса. Это предупреждение отображается из-за ошибки в IntelliJ. Вижу ответ (надеюсь) решить вашу проблему.
I не удалось найти ничего относящегося к этому, и я не уверен, действительно ли я пропустил какую-то проверку, но я просмотрел источник как ArrayList, так и интерфейс списка и не вижу, о чем это предупреждение на самом деле. Это на каждом реализованном методе, который ссылается на поле списка. Вот фрагмент класса, который я сделал:
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);
}
3 ответов
попробуйте добавить @Nonnull
(javax.аннотация.Nonnull) к toArray
метод.
предупреждение исчезло для меня, когда я добавил эту заметку. Я думаю, что предупреждение неверно, в котором говорится, что @NotNull
отсутствует.
Я согласен, что это опечатка на 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
странно.
в любом случае, другой вариант-добавить тег @SuppressWarnings в ваш класс или метод: @SuppressWarnings("NullableProblems")