【问题标题】:constructor SomeClass() is already defined in class SomeClass构造函数 SomeClass() 已在类 SomeClass 中定义
【发布时间】:2018-12-13 01:55:34
【问题描述】:

我刚刚将我的 Spring Boot 1.5.13 应用程序(使用 Lombok)升级到 Spring Boot 1.5.14,但现在无法编译并出现以下类型的错误:

constructor SomeClass() is already defined in class SomeClass

对于我的每个 POJO,例如,

@Data
@NoArgsConstructor
public class SomeClass {
    private String someProperty;
}

【问题讨论】:

    标签: java spring-boot lombok


    【解决方案1】:

    这是 Lombok 1.6.22 中的一个错误;将 Lombok 升级到 1.18.0:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.0</version>
        <scope>provided</scope>
    </dependency>
    

    或者,作为一种变通方法,更改注释的顺序:

    @NoArgsConstructor
    @Data
    public class SomeClass {
        private String someProperty;
    }
    

    详情:

    此错误的根本原因是 Lombok 1.16.22 中的错误。 Spring Boot 1.5.13 使用 Lombok 1.16.20,它没有这个 bug,但是 Spring Boot 1.5.14 将 Lombok 依赖更新为 1.16.22 - 不幸的是,Lombok 项目不符合SEMVER 然后触发了这个 bug .

    【讨论】:

      【解决方案2】:

      即使在最新版本上,我也面临这个问题,即

      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.6</version>
          <scope>provided</scope>
      </dependency>
      

      将我的成员变量标记为 final 后一切正常。

      @RequiredArgsConstructor 生成带有所需参数的构造函数,其中所需参数是最终字段和带有 @NonNull 注释的字段(稍后会详细介绍)

      ​​>

      【讨论】:

      • 事实上,如果还有 Data 或 NoArgConstructor 并且没有匹配 AAC/RAC 首选项的字段,AllArgConstructor 或 RequiredArgsConstructor 就会发生这种情况。例如,如果您将 AAC 和 NAC 放在没有它自己的字段的子类中。
      【解决方案3】:

      我使用以下方法重现了相同的问题:

      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.12</version>
      </dependency>
      

      而且,就我而言,这是@NoArgsConstructor 注释和@Data 之间的冲突。

      后来发现:

      @Data 隐含@NoArgsConstructor

      所以,the advice 删除了 @NoArgsConstructor 注释,但留下 @Data 对我有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 2011-05-27
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多