Project Lombok @Data 注释是否创建任何类型的构造函数?
Does the Project Lombok @Data annotation create a constructor of any kind?
我有一个带有 @Data
注释的 class,但我不确定是否生成了带参数的构造函数,或者唯一生成的构造函数是来自 vanilla 的默认(无参数)构造函数Java.
如果没有定义构造函数,将生成一个@RequiredArgsConstructor
。
@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。
我有一个带有 @Data
注释的 class,但我不确定是否生成了带参数的构造函数,或者唯一生成的构造函数是来自 vanilla 的默认(无参数)构造函数Java.
如果没有定义构造函数,将生成一个@RequiredArgsConstructor
。
@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。