不同的构造函数LOMBOK

问题描述

我有一个看起来像这样的课:

@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注释,但是由于龙目岛团队从未添加过该注释,所以我认为他们不太可能这样做。

或者,如注释中所述,将构建器模式与@Builder注释一起使用。然后,您可以编写如下内容:StatusUpdate.builder().text("text").date(new Date()).build();


顺便说一句,如果您确实用@Getter@Setter注释了所有字段,并在班级使用了@EqualsAndHashCode@RequiredArgsConstructor,我认为{{ 3}}注释很适合此类。

,

在实体类中使用@Builder批注,并手动构建对象。

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