龙目岛:生成构造函数丢失?
问题描述:
对于这个代码:龙目岛:生成构造函数丢失?
@Data
@Entity
@AllArgsConstructor
public class Person {
private @GeneratedValue @Id Long id;
private final String firstname;
private String middlename;
private final String lastname;
}
Lombok的(V 14年1月16日。)应产生两个构造函数。首先,由于@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;
}
两个构建函数可用。然而,这种行为对我来说毫无意义,所以我希望有人可以解释这是一个错误还是一个功能!
答
@Data
只生成构造函数,如果没有。
The documentation说:“@Data是就像在类隐@Getter,@Setter,@ToString,@EqualsAndHashCode和@RequiredArgsConstructor注释(只是如果任何明确写入构造存在,不会产生任何的构造函数)。”你的@AllArgsConstructor
被视为一个明确的书面构造函数。
这是一项功能。
披露:我是一名龙目岛开发人员。
感谢您的澄清! – JoeG