2014-01-09 35 views
1

我是@Nonnull注释的新用户。@Nonnull注释只是标记?

我试图用它写了以下测试:

public class TestNonull{ 
    public static void doSmth(@Nonnull Integer integer){} 
    public static void main(final String[] arguments){ 
     doSmth(null); 
     doSmth(1); 
    } 
} 

我没有看到任何控制台。

这是正常的吗?

+1

是对Java他们,但对于IDE和静态代码分析工具,如他们的意思是值传递不能为空的FindBugs。 –

+0

此外,这些帮助你在你的方法的良好文档,'doSmth'方法不希望输入为'null' –

+0

在我的情况下,我需要相信该方法内的整数!= null?调用* doSmth *的代码必须在方法有效(!= NULL)值中传递? – gstackoverflow

回答

6

@Nonnull@Nullable只是您的IDE或代码分析仪的标记。 javac编译器不会为这种方式注释的方法插入任何特殊代码。

+0

在我的情况下,我需要相信该方法内的整数!= null?调用doSmth的代码必须在方法有效(!= NULL)值中传递? – gstackoverflow

+1

如果您想确保提前引发异常,可以使用番石榴[Preconditions.checkNotNull()](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/ Preconditions.html#checkNotNull(T))。 –

+0

我知道。请回答是或否回答我的问题 – gstackoverflow

0

这只是您的IDE的注释。在调用函数之前,您应该检查参数是否为空。

就像是:

String capitalize(@NonNull String in) { 
     return in.toUpperCase();    // no null check required 
    } 
    void caller(String s) { 
     if (s != null) 
      System.out.println(capitalize(s)); // preceding null check is required 
    } 

检查 - >Using null annotations