簡體   English   中英

替換為字段和方法的javax.annotation的FindBugs DefaultAnnotation

[英]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到我自己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 {
}

所以從純代碼的角度來看,實際上沒有任何重大差異。

一旦您之后開始分發代碼,就會出現差異。

只要您不使用注釋jar JRE發送代碼,就應該沒問題。

如果您正在分發JRE,那么您已經知道需要遵守Oracle Java二進制許可證

您可能希望使用該許可證的條款刷新自己,特別是:

F. JAVA技術限制。 您不得創建,修改或更改被許可方的行為,或授權其創建,修改或更改以任何方式標識為“java”,“javax”,“javax”的類,接口或子包的行為。 sun“,”oracle“或Oracle在任何命名約定中指定的類似約定。

因此,如果您正在分發JRE並且相同的發行版包含一個定義javax子包中的類的jar文件, 除非這些類符合JSR發布和發布的規范, 否則您不遵守Oracle Java二進制許可證的條款。

在這一點上,您應該看一下JSR 305官方頁面

此時JSR尚未發布任何內容

JSR  - 截至2016年3月 - 被列為休眠狀態

因此,您需要確保不在Windows安裝程序,OS-X安裝程序,Docker鏡像等中的JRE旁邊分發“jsr305.jar”文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM