簡體   English   中英

龍目島中的自定義`NonNull`注釋

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

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