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

Does the Project Lombok @Data annotation create a constructor of any kind?

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

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

Project Lombok @Data page说明:

@Data is like having implicit @Getter, @Setter, @ToString, @EqualsAndHashCode and @RequiredArgsConstructor annotations on the class (except that no constructor will be generated if any explicitly written constructor exists).

@Data 仅创建一个@RequiredArgsConstructor。 Data annotation and constructors 的 Lombok 文档站点说明:

@RequiredArgsConstructor generates a constructor with 1 parameter for each field that requires special handling. All non-initialized final fields get a parameter, as well as any fields that are marked as @NonNull that aren't initialized where they are declared. For those fields marked with @NonNull, an explicit null check is also generated. The constructor will throw a NullPointerException if any of the parameters intended for the fields marked with @NonNull contain null. The order of the parameters match the order in which the fields appear in your class.

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

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

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

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