Lombok 中的自定义 setter 和带有静态助手的构造函数

Custom setter and constructor with static helper in Lombok

我想在 Lombok 中使用自定义 setter 和带有静态助手的构造函数:

@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();

Builder 模式的要点几乎总是 return 从本质上可变的构建器对象到不可变对象。您所指的静态助手是用于创建 User 对象的 Builder 模式工厂方法。您不需要为 User 创建 setter,而是不应该使用 @Data 定义 User。

如果您需要在构造 User 或 Employee 对象后调用某些方法,只需将一个函数添加到相应的 class 并在构造后调用它。除了初始化 class 成员之外,隐藏构造函数内部的工作可能很危险,因为您隐藏了功能,并且如果它是私有方法,则该功能无法被覆盖。

    @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 {

    }