提问者:小点点

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


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


共2个答案

匿名用户

如果没有定义构造函数,将生成@必需的ArgsConstructor

Project Lombok@Data页面解释:

@Data就像在类上有隐式的@Getter、@Setter、@ToString、@EqualsAndHashCode和@必需的ArgsConstructor注释(除了如果存在任何显式编写的构造函数,则不会生成构造函数)。

匿名用户

@Data只是在创建一个@必需的ArgsConstructor。Lombok留档站点为Data注释和构造函数解释:

@必需参数构造函数为每个需要特殊处理的字段生成一个带有1个参数的构造函数。所有未初始化的最终字段都获得一个参数,以及任何标记为@NonNull的字段,这些字段在声明时没有初始化。对于那些标记为@NonNull的字段,还会生成显式的空检查。如果任何用于标记为@NonNull的字段的参数包含null,构造函数将抛出NullPointerException。参数的顺序与字段在您的类中出现的顺序相匹配。

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

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

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

您可以使x和y@NonNull或last,因此它们必须通过构造函数传递,或者使用@AllArgsConstructor注释您的类Z。