我目前正在使用
@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替代方法是什么?
答案 0 :(得分:4)
据我所知,没有。想要做同样的事情,我将source for 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 {
}
答案 1 :(得分:1)
所以从纯代码的角度来看,实际上没有任何重大差异。
之后开始分发代码时会出现差异。
只要您没有使用注释jar 和发送JRE代码,就应该没问题。
如果您正在分发JRE,那么您已经知道需要遵守Oracle Java Binary License。
您可能希望使用该许可证的条款进行更新,特别是:
F。 JAVA技术限制。您不得创建,修改或更改被许可方的行为,或授权其创建,修改或更改以任何方式标识为&#34; java&#34;的类,接口或子包的行为, &#34; javax&#34;,&#34; sun&#34;,“oracle”或Oracle在任何命名约定中指定的类似约定。
因此,如果您要分发JRE并且相同的发行版包含一个定义javax
子包中的类的jar文件,除非这些类符合JSR发布和发布的规范,您没有遵守Oracle Java二进制许可证的条款。
此时您应该查看JSR 305 official page。
此时JSR尚未发布任何内容:
因此,您需要确保不分发&#34; jsr305.jar&#34; Windows安装程序,OS-X安装程序,Docker映像等中的JRE旁边的文件