替换为字段和方法的javax.annotation的FindBugs DefaultAnnotation

时间:2012-11-16 10:15:22

标签: java findbugs

我目前正在使用

@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替代方法是什么?

2 个答案:

答案 0 :(得分:4)

据我所知,没有。想要做同样的事情,我将source for ParametersAreNonnullByDefault复制到我自己的FieldsAreNonnullByDefaultMethodsAreNonnullByDefault,并将@TypeQualifierDefault值更改为匹配(FIELDMETHOD各自)。 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尚未发布任何内容

JSR - as of March 2016 - is listed as dormant

因此,您需要确保不分发&#34; jsr305.jar&#34; Windows安装程序,OS-X安装程序,Docker映像等中的JRE旁边的文件