[英]Custom `NonNull` annotation in Lombok
這是Lombok的NonNull
注釋的Java文檔:
如果放置在參數上,則lombok將在方法/構造函數主體的開頭插入空檢查,並拋出一個帶有參數名稱作為消息的{@code NullPointerException}。 如果放在字段上,則任何為此字段分配值的生成方法也會產生這些nullcheck。 請注意,帶有任何大小寫和任何包的名為{@code NonNull}的任何注釋都將導致為生成的方法生成nullcheck(並且注釋將被復制到getter返回類型和生成的方法的任何參數),但是只有此注釋,如果如果出現在參數上,則會導致將空檢查插入您本來要手寫的方法中。
警告:如果Java社區確實決定支持單個{@code @NonNull}注釋(例如,通過JSR305),則將從lombok軟件包中刪除該注釋。 如果需要更新導入語句使您感到恐懼,則應使用自己的名為{@code @NonNull}的注釋,而不要使用此注釋。
假設我擁有自己的注釋的最簡單方法是什么 NonNull
Nonnull
和Lombok根據我的注釋注入null檢查?
更新:我的問題很熱門,要有用於方法參數的注釋。
首先,您需要將其命名為nonNull
(不相關)。 NotNull
無法識別NotNull
。 此外,您需要設置另一個龍目島標注(如@Data
, @Setter
,...),讓你的類型得到由龍目島處理。
總結您的自定義注釋可能不如@lombok.NonNull
本身有價值。 一個受益於@lombok.NonNull
-annotation的示例是,當您的類型不包含任何其他Lombok注釋時,甚至不處理自定義注釋,例如:
class NoLombokAnnotationsAnywhere {
void testMe(@lombok.NonNull String nonNull) { /* .. */ }
}
調用new NoLombokAnnotationsAnywhere().testMe(null)
將立即生成NullPointerException
。 而這不會對您的自定義注釋產生任何影響。 當然,這僅在您沒有其他Lombok注釋的情況下適用。 一旦Lombok處理了類型,您的注釋也將被處理。
如果您有自己的NonNull
,則可以僅添加另一個似乎合適的Lombok注釋,Lombok為您添加一個空檢查,例如:
@Data
class NonNullData {
@mycustom.Nonnull
String value;
}
// Calling the following throws a NullPointerException as expected
new NonNullData(null);
您可能還會發現以下相關問題: 支持名為@NotNull和@NonNull的注釋
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.