2017-04-26 134 views
1

对于这个代码:龙目岛:生成构造函数丢失?

@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; 
} 

两个构建函数可用。然而,这种行为对我来说毫无意义,所以我希望有人可以解释这是一个错误还是一个功能!

回答

2

@Data只生成构造函数,如果没有。

The documentation说:“@Data是就像在类隐@Getter,@Setter,@ToString,@EqualsAndHashCode和@RequiredArgsConstructor注释(只是如果任何明确写入构造存在,不会产生任何的构造函数)。”你的@AllArgsConstructor被视为一个明确的书面构造函数。

这是一项功能。

披露:我是一名龙目岛开发人员。

+0

感谢您的澄清! – JoeG