【问题标题】:Why @Data and @Builder doesnt work together为什么@Data 和@Builder 不能一起工作
【发布时间】:2020-03-04 02:43:56
【问题描述】:

我有这个简单的课程

public class ErrorDetails {
    private String param = null;
    private String moreInfo = null;
    private String reason = null;
     ...
}

重构之后,我添加了@Data@Builder,但是所有的实例化都不再起作用了

ErrorDetails errorDetails = new ErrorDetails();

'ErrorDetails(java.lang.String, java.lang.String, java.lang.String)' 不公开 'com.nordea.openbanking.payments.common.ndf.client.model.error.ErrorDetails'。 无法从外部包访问

如果我删除了@Builder,那么它会正常工作, 为什么我不能同时使用@Data@Builder

【问题讨论】:

    标签: java builder lombok


    【解决方案1】:

    龙目岛的@Buildermust have@AllArgsConstructor为了工作

    还应该添加@AllArgsConstructor

    在后台,它使用 constructor with all fields 构建所有字段

    @Builder 应用到一个类就像您将@AllArgsConstructor(access = AccessLevel.PACKAGE) 添加到该类并将@Builder 注释应用到这个全参数构造函数。这仅在您自己没有编写任何显式构造函数时才有效。

    【讨论】:

      【解决方案2】:

      完整的配置应该是:

      @Data
      @Builder(toBuilder = true)
      @AllArgsConstructor
      @NoArgsConstructor
      class ErrorDetails {
          private String param; // no need to initiate with null
          private String moreInfo;
          private String reason;
      }
      

      【讨论】:

      • 知道为什么我应该使用所有这些注释吗?
      • 一定要加toBuilder = true吗?
      • @user7294900 不,但在某些情况下它很重要,我使用它是因为我在没有 toBuilder 的情况下使用它时遇到了一些问题在这里查看我的帖子stackoverflow.com/questions/48349077/…
      猜你喜欢
      • 2020-12-31
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多