【问题标题】:Different constructors (LOMBOK)不同的构造函数(LOMBOK)
【发布时间】:2020-12-09 15:36:28
【问题描述】:

我有一个如下所示的课程:

@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 的方法?

谢谢!

【问题讨论】:

  • 您链接的帖子中有人建议使用 Lombok @Builder。否则我怀疑是否有任何首选的方法来解决它。
  • 你可以手动添加

标签: java constructor annotations lombok


【解决方案1】:

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

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


顺便说一句,如果您使用 @Getter@Setter 注释所有字段并在类级别使用 @EqualsAndHashCode@RequiredArgsConstructor,我认为 @Data 注释可能非常适合这个类。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2016-03-18
      相关资源
      最近更新 更多