簡體   English   中英

Lombok 中帶有靜態助手的自定義 setter 和構造函數

[英]Custom setter and constructor with static helper in Lombok

我想在 Lombok 中使用帶有靜態助手的自定義設置器和構造函數:

@SuperBuilder(toBuilder = true)
public class Teacher extends User {
}


@Data
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(NON_NULL)
public class User implements Employee {
    private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();

    private String username;
    private String password;

    User(String username, String password) {
        System.out.println("*** test ***");

    }
}

但是當我創建一個 Teacher 對象時,似乎沒有調用構造函數,因為我在控制台中沒有看到測試消息

Teacher.builder()
 .username("username").password("pwd").build();

構建器模式的要點幾乎總是從本質上可變的構建器對象返回一個不可變對象。 您所指的靜態助手是用於創建 User 對象的 Builder 模式工廠方法。 您不需要為 User 創建一個 setter,而是不應該使用 @Data 定義 User。

如果您需要在構造 User 或 Employee 對象后調用某些方法,只需向相應的類添加一個函數並在構造后調用它。 除了初始化類成員之外,在構造函數中隱藏工作可能很危險,因為您隱藏了功能,並且如果它是一個私有方法,則該功能不能被覆蓋。

    @SuperBuilder(toBuilder = true)
    public static class Teacher extends User {

    }

    @AllArgsConstructor
    @SuperBuilder(toBuilder = true)
    public static class User implements Employee {

        private final String username;

        private final String password;
    }

    public static void main(String[] args) {
        Teacher teacher = Teacher.builder()
                .username("username").password("pwd").build();

        System.out.println(teacher.toString());
    }

    interface Employee {

    }

暫無
暫無

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

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