[英]How to use lombok's @Tolerate on a constructor
@Tolerate
注釋是lombok
中的一項實驗性功能,其中目標類型是 Method 或 Constructor。 龍目島網站提到:
任何方法或構造函數都可以用 @Tolerate 注釋,並且 lombok 將表現得好像它不存在一樣。
它說明了一個 setter 方法的示例:
@Setter
private Date date;
@Tolerate
public void setDate(String date) {
this.date = Date.valueOf(date);
}
在上面的示例中,如果我們沒有添加@Tolerate
,那么 lombok 將不會生成setDate(Date date)
因為已經存在同名的方法(即使參數類型不同)。 因此,從這個例子中可以清楚地看出它是如何作用於一個方法的。
但我無法理解如何將此注釋用於構造函數。
@AllArgsConstructor
public class One {
private int id;
private String name;
// adding @Tolerate here does nothing.
public One(int a, int b) {
}
}
在上面的代碼中,即使存在另一個具有相同參數數量但類型不同的構造函數,lombok 也會生成一個全參數構造函數。
那么,我們如何在構造函數的上下文中使用@Tolerate
呢?
@Data
、 @Value
和@Builder
注釋創建構造函數( @Data
情況下所有必需的 arguments 的構造函數,@ @Value
和@Builder
情況下所有 arguments 的構造函數)。 但是,如果不存在其他構造函數,它們只會執行這些操作。 如果您創建自己的構造函數,@ @Builder
@Value
@Data
創建它們的構造函數,除非您使用@Tolerate
注釋自己的構造函數。
簡而言之,構造函數上的@Tolerate
只有在與@Data
、 @Value
或@Builder
一起使用時才會產生影響。 如果您將它與@NoArgConstructor
、 @AllArgsConstructor
或@RequiredArgsConstructor
一起使用,它沒有任何效果,就像 Gautham 注意到的那樣。
例子:
@Value
public class Main {
private int id;
private String name;
@Tolerate // Now the allArgsConstructor will be created. If you omit the annotation, no allArgsConstructor will be created.
public Main(String name) {
this.name = name;
this.id = 0;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.