对于此代码:
@Data
@Entity
@AllArgsConstructor
public class Person {
private @GeneratedValue @Id Long id;
private final String firstname;
private String middlename;
private final String lastname;
}
Lombok(v.1.16.14)应该生成两个构造函数。首先,由于@Data:
public Person(String firstname, String lastname) { ... }
由于@AllArgsConstructor,还应该有:
public Person(Long id, String firstname, String middlename, String lastname);
但是,添加@AllArgsConstructor
注释时,第一个(两个参数)构造函数“消失”。 @Data
状态的javadoc:
Equivalent to @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode.
所以我错误地认为两个论点应该在那里?这有一个非常简单的解决方法,因为如果明确添加@RequiredArgsConstructor
注释:
@Data
@Entity
@AllArgsConstructor
@RequiredArgsConstructor
public class Person {
private @GeneratedValue @Id Long id;
private final String firstname;
private String middlename;
private final String lastname;
}
两个ctors都可用。但是,这种行为对我来说几乎没有任何意义,所以我希望有人可以解释这是一个错误还是一个功能!
答案 0 :(得分:3)
@Data
只生成构造函数(如果没有)。
The documentation说:" @Data就像在类上隐含@Getter,@ Setter,@ ToTtring,@ EqualsAndHashCode和@RequiredArgsConstructor注释一样(除非没有明确写出任何构造函数)构造函数存在)。"您的@AllArgsConstructor
计为明确编写的构造函数。
这是一个功能。
披露:我是龙目岛的开发者。