[英]alternative to FindBugs DefaultAnnotation for javax.annotation for fields and methods
我目前正在使用
@DefaultAnnotation(NonNull.class)
package jobs;
import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
import edu.umd.cs.findbugs.annotations.NonNull;
但是不推荐使用注释@ edu.umd.cs.findbugs.annotations.DefaultAnnotation: http ://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/annotations/DefaultAnnotation.html
他们建议使用javax.annotation.ParametersAreNonnullByDefault但是,DefaultAnnotation不仅定位参数,还定位字段和方法。
那么,默认情况下将字段和方法设置为Nonnull的javax.annotation替代方法是什么?
据我所知,没有。 希望同样的事情,我复制的源ParametersAreNonnullByDefault
到我自己FieldsAreNonnullByDefault
和MethodsAreNonnullByDefault
,改变了@TypeQualifierDefault
值匹配( FIELD
和METHOD
各自的)。 FindBugs可以完美地获取这些新注释。
这是FieldsAreNonnullByDefault
的示例:
package com.sample;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.annotation.meta.TypeQualifierDefault;
/**
* This annotation can be applied to a package or class to indicate that the
* classes' fields in that element are nonnull by default unless there is
* <ul>
* <li>an explicit nullness annotation
* <li>a default field annotation applied to a more tightly nested element.
* </ul>
*/
@Documented
@Nonnull
@TypeQualifierDefault(ElementType.FIELD) // <-- METHOD for return values
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault {
}
所以从纯代码的角度来看,实际上没有任何重大差异。
一旦您之后开始分发代码,就会出现差异。
只要您不使用注释jar 和 JRE发送代码,就应该没问题。
如果您正在分发JRE,那么您已经知道需要遵守Oracle Java二进制许可证 。
您可能希望使用该许可证的条款刷新自己,特别是:
F. JAVA技术限制。 您不得创建,修改或更改被许可方的行为,或授权其创建,修改或更改以任何方式标识为“java”,“javax”,“javax”的类,接口或子包的行为。 sun“,”oracle“或Oracle在任何命名约定中指定的类似约定。
因此,如果您正在分发JRE并且相同的发行版包含一个定义javax
子包中的类的jar文件, 除非这些类符合JSR发布和发布的规范, 否则您不遵守Oracle Java二进制许可证的条款。
在这一点上,您应该看一下JSR 305官方页面 。
此时JSR尚未发布任何内容 :
因此,您需要确保不在Windows安装程序,OS-X安装程序,Docker镜像等中的JRE旁边分发“jsr305.jar”文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.