项目Lombok @Data注释是否创建了任何类型的构造函数?

时间:2017-02-01 12:04:52

标签: java constructor lombok

我有一个带有@Data注释的类,但是我不确定是否生成了带参数的构造函数,或者只有生成的构造函数是来自vanilla Java的默认构造函数(无参数)。

2 个答案:

答案 0 :(得分:20)

如果没有定义构造函数,将生成@RequiredArgsConstructor

Project Lombok @Data page解释说:

  

@Data就像在类上隐含@Getter,@ Setter,@ ToTtring,@ EqualsAndHashCode和 @RequiredArgsConstructor 注释一样(除非没有明确编写的构造函数,否则不会生成构造函数)存在)

答案 1 :(得分:1)

@Data仅创建一个@RequiredArgsConstructor。 Data annotationconstructors的龙目岛文档站点解释了:

  

@RequiredArgsConstructor生成带有1个参数的构造函数,用于   每个需要特殊处理的字段。所有未初始化的最终   字段获取参数以及标记为的任何字段   @NonNull在声明它们的位置未初始化。对于那些   标有@NonNull的字段,还会生成显式的null检查。   构造函数将抛出NullPointerException,如果任何   用于标有@NonNull的字段的参数包含null。   参数的顺序与字段出现的顺序匹配   在你班上。

假设您有一个使用Lombok @Data批注的POJO:

public @Data class Z {
    private String x;
    private String y;
}

您不能以Z z = new Z(x,y)的形式创建对象,因为Z类上没有“必需”的arg。它正在使用零参数创建构造函数,因为@Data为您提供了属性的Setters和Getters,并且您可以在创建实例后调用setX和setY。

您可以将x和y设置为@NonNull或final,以便它们必须通过构造函数传递,或者使用@AllArgsConstructor注释类Z。