在Java8中使用Null Analysis注释

时间:2015-05-09 09:43:37

标签: java eclipse annotations java-8

在Java中,我使用注释使用'null analysis'。我没有使用Eclipse的默认注释,而且我已经定义了自己的所有权。

对于每个包,我曾在NonNullByDefault文件中添加全局package-info.java注释。

使用Java版本< = Java7,下面的代码没有问题,一切正常。

@my.package.annotations.NonNullByDefault
package my.foo.package;

但是当我将Eclipse设置为符合Java8(我系统上安装的唯一JDK是Java8)时,就会出现错误:

  

尚未为包my.foo.package指定默认的nullness注释 - Java问题

我的注释以下列方式声明:

@Retention(RetentionPolicy.CLASS)
@Target({ ElementType.PACKAGE, ElementType.TYPE, 
          ElementType.METHOD, ElementType.CONSTRUCTOR })
public @interface NonNullByDefault { 
    // marker annotation
}

Java8中有什么新内容?有人能解释我使用我的注释的好方法吗?

2 个答案:

答案 0 :(得分:1)

JDT自己的注释在org.eclipse.jdt.annotation的版本1.x和2.x之间发生了显着变化。为了在Java 8中充分利用类型注释的更高精度,@NonNullByDefault现在具有类型DefaultLocation[]的属性,指定默认应该应用的确切位置。

使用相同级别的详细信息重建您自己的注释,并使JDT了解您自己的注释会很麻烦。

仍然应该在"默认"中理解无属性@NonNullByDefault。方式(参见org.eclipse.jdt.annotation.NonNullByDefault.value的默认值)。显然有a bug来评估Java 8项目中的这种自定义注释。

答案 1 :(得分:0)

请你试试以下内容:

  1. 将文件名package-info.java放入每个Java包
  2. 在文件中输入以下内容:

    @NonNullByDefault package your.package; import org.eclipse.jdt.annotation.NonNullByDefault;

  3. 这将指定您不希望在任何参数的任何位置接受null,并且您也不会在代码中加载@NonNull。如果您创建新包但忘记复制文件,则可能会收到A default nullness annotation has not been specified for the package my.foo.package之类的警告。