web-dev-qa-db-ja.com

アノテーションが付けられていないメソッドは、@ NotNullでアノテーションが付けられたメソッドをオーバーライドします

セットのいくつかのプロパティとリストの他のプロパティを提供するカスタムデータ構造を実装しています。ただし、実装されているほとんどのメソッドについて、IntelliJでこの奇妙な警告が表示されますIDEA on Java 7:

アノテーションが付けられていないメソッドは、@ NotNullでアノテーションが付けられたメソッドをオーバーライドします

[〜#〜] edit [〜#〜]:以下のコードは問題には関係ありませんが、元の質問の一部です。この警告は、IntelliJのバグが原因で表示されます。問題を(うまくいけば)解決するには answer を参照してください。


私はそれに関連するものを見つけることができず、実際に何らかのチェックが欠落しているかどうかはわかりませんが、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);
}
27
BrDaHa

toArrayメソッドに@Nonnulljavax.annotation.Nonnull )を追加してみてください。

この注釈を追加すると、警告が消えました。 @NotNullがないという警告メッセージは正しくないと思います。

27
Invisible Arrow

Nonnull対NotNullのタイプミスだと私は同意します。ただし、他にもいくつかのバグが発生しているようです。私はカスタムセットを実装していましたが、IteratorメソッドとtoArrayメソッドにアノテーションがないと不満を漏らしていました。しかし、JDKを見ると、SetまたはCollectionのインターフェースにそのような注釈はないようです。

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

変。

とにかく、他のオプションは@SuppressWarningsタグをクラスまたはメソッドに追加することです:@SuppressWarnings( "NullableProblems")

1
doku

追加してみてください:

private ListHashSet() {}
0
Totoro