Lombok:生成的构造函数丢失了吗?

时间:2017-04-26 19:00:46

标签: lombok

对于此代码:

@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都可用。但是,这种行为对我来说几乎没有任何意义,所以我希望有人可以解释这是一个错误还是一个功能!

1 个答案:

答案 0 :(得分:3)

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

The documentation说:" @Data就像在类上隐含@Getter,@ Setter,@ ToTtring,@ EqualsAndHashCode和@RequiredArgsConstructor注释一样(除非没有明确写出任何构造函数)构造函数存在)。"您的@AllArgsConstructor计为明确编写的构造函数。

这是一个功能。

披露:我是龙目岛的开发者。