java 错误:构造函数已在类中定义 - 使用 lombok

问题描述 投票:0回答:4

错误

java: constructor Restaurant() is already defined in class  
com.example.order_system.domain.Restaurant

当我添加这个类并运行程序时出现

@Entity
@NoArgsConstructor
@RequiredArgsConstructor
@Getter
@Setter
@ToString
public class Restaurant {

    @Id
    @GeneratedValue
    private long id;

    @NotEmpty(message = "The restaurant must have a name")
    private String name;

    @NotEmpty(message = "Please add a description for this restaurant")
    private String description;

    @NotEmpty(message = "The restaurant must have a location")
    private String location;

    @OneToMany(mappedBy = "restaurant", fetch = FetchType.EAGER)
    private List<ContactDetails> contactDetails = new ArrayList<>();

}
java lombok
4个回答
19
投票

文档中所述 @RequiredArgsConstructor 是使用

final
字段构建的:

@RequiredArgsConstructor 生成一个带有 1 个参数的构造函数 每个需要特殊处理的字段。所有未初始化的最终 fields 获取一个参数,以及标记为的任何字段 @NonNull 未在声明它们的位置进行初始化。对于那些 用@NonNull 标记的字段,还会生成显式空检查。 如果以下任一情况,构造函数将抛出 NullPointerException 用于标有 @NonNull 的字段的参数包含 null。 参数的顺序与字段出现的顺序匹配 在你的课堂上。

因此,要么删除 @RequiredArgsConstructor 注释,要么使用

final
关键字(或 @NonNull 注释)标记某些字段。


5
投票

尝试将@RequiredArgsConstructor更改为@AllArgsConstructor,这很好。 请参阅文档

了解更多信息

1
投票

在我的场景中,存在一个空类,抛出与上述相同的错误,删除所有基于构造函数的注释,即

@AllArgsConstructor and @NoArgsConstructor
,为我解决了问题。


0
投票

导致此错误的另一种情况(即使使用较新的 Lombok 版本)是在 IntelliJ 中使用其“注释处理器”运行测试时,它似乎有自己的逻辑,不能很好地处理重复项。

您可以使用删除冲突的

@NoArgsConstructor
@AllArgsConstructor
注释之一的相同解决方法来修复此问题。

© www.soinside.com 2019 - 2024. All rights reserved.