簡體   English   中英

在帶有超類的 Lombok 構建器中使用自定義 setter

[英]Use custom setter in Lombok's builder with superclass

我想在 Lombok 的構建器中使用自定義 setter 並覆蓋 1 個方法,就像這樣

@SuperBuilder
public class User implements Employee {
    private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();

    private String username;

    private String password;

    public static class UserBuilder {
        public UserBuilder password(String password) {
            this.password = ENCODER.encode(password);
            return this;
        }
    }
}

但我有這個編譯錯誤

Existing Builder must be an abstract static inner class.

@Builder@SuperBuilder生成兩個構建器類,一個public類和一個private類。 兩者都加載了大量的泛型以確保正確的類型推斷。

如果您想向構建器類添加或修改方法,您應該查看未定制的delombok ed 代碼並從那里復制並粘貼public abstract static class標頭。 否則,您可能會弄錯泛型,從而導致您無法修復的編譯器錯誤。 還要查看生成的方法的return類型和語句,以確保正確定義。

@SuperBuilder文檔也提到了這一點:

由於大量使用泛型,我們強烈建議從未自定義的 delomboked 代碼中復制構建器類定義標頭。

在您的情況下,您必須按如下方式自定義構建器:

public static abstract class UserBuilder<C extends User, B extends User.UserBuilder<C, B>> {
    public B password(final int password) {
        this.password = ENCODER.encode(password);
        return self();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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