簡體   English   中英

如何在構造函數上使用 lombok 的 @Tolerate

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

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