47

我正在实现一个自定义数据结构,它为我提供了一些集合的属性和列表的其他属性。不过,对于大多数已实现的方法,我在 Java 7 上的 IntelliJ IDEA 中收到了这个奇怪的警告:

未注解的方法会覆盖使用@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();
}

编辑:我在类中有这些额外的构造函数:

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

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

3 回答 3

69

尝试将@Nonnulljavax.annotation.Nonnull)添加到toArray方法中。

当我添加此注释时,警告对我来说消失了。我认为警告消息不正确,它说@NotNull缺少。

于 2015-01-14T12:23:53.503 回答
4

我同意这是 Nonnull 与 NotNull 的拼写错误。但是,似乎还有其他一些错误正在发生。我正在实现一个自定义 Set,它抱怨 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")

于 2015-11-12T00:03:56.733 回答
0

尝试添加:

private ListHashSet() {}
于 2014-06-30T17:59:12.793 回答