@Nonnull
パラメータをアノテーションでマークするメソッドがあります。メソッドを呼び出すコードは、値がnullかどうかをチェックする必要があります。単なるx != null
チェックではなく、別のクラスのユーティリティメソッドを呼び出しています。(実際のコードでは、ユーティリティメソッドはそれが空白の文字列であるかどうかもチェックします)。
私の問題は、Intellij IdeaがNonnullメソッド呼び出しで検査警告を表示し、私の変数が「nullである可能性がある」と言っていることです。ユーティリティメソッドチェックのためにnullにできないことを知っています-インスペクターにそれをどのように伝えることができますか?
それは少し抽象的なので、これが私が意味することの最小限の例です:
package org.ethelred.ideatest;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
* tests annotations
*/
public class AnnotationChecker
{
public static void main(String[] args)
{
String x = null;
if(args.length > 0)
{
x = args[0];
}
if(!isNull(x))
{
useObject(x);
}
if(x != null)
{
useObject(x);
}
}
public static boolean isNull(@CheckForNull Object o)
{
return o == null;
}
public static void useObject(@Nonnull Object o)
{
System.out.println(o);
}
}
これは、JSR305アノテーションを使用します。
この例では、Intellijの最初の呼び出しで、パラメーターに「引数'x'がnullである可能性があります」という警告が表示されます。2回目の呼び出しでは、警告はありません。useObject
x