错误
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<>();
}
如文档中所述 @RequiredArgsConstructor 是使用
final
字段构建的:
@RequiredArgsConstructor 生成一个带有 1 个参数的构造函数 每个需要特殊处理的字段。所有未初始化的最终 fields 获取一个参数,以及标记为的任何字段 @NonNull 未在声明它们的位置进行初始化。对于那些 用@NonNull 标记的字段,还会生成显式空检查。 如果以下任一情况,构造函数将抛出 NullPointerException 用于标有 @NonNull 的字段的参数包含 null。 参数的顺序与字段出现的顺序匹配 在你的课堂上。
因此,要么删除 @RequiredArgsConstructor 注释,要么使用
final
关键字(或 @NonNull 注释)标记某些字段。
尝试将@RequiredArgsConstructor更改为@AllArgsConstructor,这很好。 请参阅文档
了解更多信息在我的场景中,存在一个空类,抛出与上述相同的错误,删除所有基于构造函数的注释,即
@AllArgsConstructor and @NoArgsConstructor
,为我解决了问题。
导致此错误的另一种情况(即使使用较新的 Lombok 版本)是在 IntelliJ 中使用其“注释处理器”运行测试时,它似乎有自己的逻辑,不能很好地处理重复项。
您可以使用删除冲突的
@NoArgsConstructor
或 @AllArgsConstructor
注释之一的相同解决方法来修复此问题。