不同的构造函数(LOMBOK)

Different constructors (LOMBOK)

我有一个 class 看起来像这样:

@EqualsAndHashCode
@RequiredArgsConstructor
public class StatusUpdate {

    @Getter
    @Setter
    private Long id;
    
    @Getter
    @Setter
    @NonNull
    private String text;
    
    @Getter
    @Setter
    @NonNull
    private Date added; 
}

我想使用 Lombok 创建这两个构造函数:

public StatusUpdate(String text) {
     this.text = text;
}

public StatusUpdate(String text, Date added) {
     this.text = text;
     this.added = added;
}

我尝试使用所有三个注释: @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor

但是我不能用这些来做到这一点,我只有一个有两个参数的构造函数,所以我需要一个只有一个参数的构造函数。我读了这个主题:@SomeArgsConstructor,这是我需要的,但由于这不存在,我想我应该手动创建一个我需要的 arg 构造函数和我将使用 Lombok 处理的其他构造函数,或者有更好的/仅使用 Lombok 更优雅的方式?

谢谢!

是的,您应该自己添加它们。几年前有 already a discussion 添加 @SomeArgsConstructor 注释,但由于 Lombok 团队从未添加该注释,我认为他们不太可能会这样做。

或者,如评论中所述,使用带有 @Builder 注释的构建器模式。然后你可以这样写:StatusUpdate.builder().text("text").date(new Date()).build();.


顺便说一句,如果您使用 @Getter@Setter 注释所有字段并在 [=28= 上使用 @EqualsAndHashCode@RequiredArgsConstructor ] 级别,我认为 @Data 注释可能很适合这个 class.

对您的实体使用 @Builder 注释 class 并手动构建您的对象。

 User user = User.builder()
                    .username(signupDto.getUsername())
                    .email(signupDto.getEmail())
                    .password(encoder.encode(signupDto.getPassword()))
                    .roles(roles)
                    .build();