2012-11-16 42 views
3

我目前使用替代FindBugs的DefaultAnnotation的javax.annotation中的字段和方法

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

回答

5

據我所知沒有。想要同樣的事情,我將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 { 
} 
0

所以從這純代碼點,確實沒有任何主要的區別。

之後您開始分發代碼後會出現差異。

只要你沒有運送你的代碼與批註罐子 JRE,你應該沒問題。

如果您要發佈JRE,那麼您已經知道您需要遵守Oracle Java Binary License

您可能要刷新自己與許可證的條款,特別是:

F. Java技術限制。您不得創建,修改或更改授權的行爲,或授權您的許可證持有者創建,修改或更改以任何方式標識爲「java」,「javax」,「」的類,接口或子包的行爲,太陽「,」甲骨文「或Oracle在任何命名約定中指定的類似約定。

所以,如果你正分發JRE和相同的分佈包括一個jar文件,該文件定義了javax子包類,除非類遵守由JSR發佈和出版的規範,你是不是有符合Oracle Java二進制許可證的條款。

在這一點上,你應該看看JSR 305 official page

在這個時間點JSR並沒有公佈任何

JSR - as of March 2016 - is listed as dormant

所以,你需要確保你不分發JRE旁邊的「jsr305.jar」你的文件Windows安裝程序,OS-X安裝程序,Docker映像等

+0

IIUC這隻適用於Oracle JRE而不適用於OpenJDK JRE。官方的Java docker鏡像通常使用OpenJDK – csanchez

+0

這個截圖看起來並不完整。該頁面上發佈了規範,並且jsr305.jar符合該規範。 – Christopher

+0

@Christopher可以請你分享一下你引用的規範的截圖嗎?規範草案要求提供'@ NonNull',而jsr350.jar不包含這樣的註釋,而是包括一個'@ Nonnull'註釋,而不是......我希望是另外的......我真的......但是很傷心我看不出任何東西來反擊 –

相關問題