[英]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.