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

Jos*_*z_2 21 java constructor lombok

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

Jos*_*z_2 31

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

该项目龙目岛@Data页解释:

@Data是像具有隐含@Getter,@Setter,@ToString,@EqualsAndHashCode和@RequiredArgsConstructor在类注解(不同之处在于,如果任何明确写入构造不存在的构造会产生).

  • Lombok 如何决定将(可能的)多个实例中的哪一个用作构造函数参数?当使用Data或RequiredArgsConstructor注释时 (2认同)

小智 5

@Data仅创建一个@RequiredArgsConstructor。Lombok文档站点的数据注释和构造函数说明:

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

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

public @Data class Z {
    private String x;
    private String y;
}
Run Code Online (Sandbox Code Playgroud)

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

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