在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中有什么新内容?有人能解释我使用我的注释的好方法吗?
答案 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)
请你试试以下内容:
package-info.java
放入每个Java包在文件中输入以下内容:
@NonNullByDefault
package your.package;
import org.eclipse.jdt.annotation.NonNullByDefault;
这将指定您不希望在任何参数的任何位置接受null,并且您也不会在代码中加载@NonNull
。如果您创建新包但忘记复制文件,则可能会收到A default nullness annotation has not been specified for the package my.foo.package
之类的警告。