构造函数SomeClass()已在类SomeClass中定义

时间:2018-07-04 15:15:48

标签: java spring-boot lombok

我刚刚将我的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;
}

3 个答案:

答案 0 :(得分:10)

这是Lombok 1.6.22中的错误;将龙目岛升级到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使用没有此bug的Lombok 1.16.20,但是Spring Boot 1.5.14将Lombok依赖关系更新为1.16.22-不幸的是,Lombok项目不符合SEMVER并随后触发这个错误。

答案 1 :(得分:0)

即使在最新版本(即

)中,我也遇到了这个问题
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.6</version>
    <scope>provided</scope>
</dependency>

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

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

答案 2 :(得分:0)

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

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

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

后来证明:

<块引用>

@Data 暗示@NoArgsConstructor

因此,the advice 用于删除 @NoArgsConstructor 注释,但保留 @Data 对我很有帮助。