龙目岛的构造函数功能
Constructors features in Lombok
如果我有一个 class 具有三个实例变量和一个实例最终变量。
是否会限制我使用无参数构造函数创建 class 的实例?
public @Data class Employee {
private Integer empId;
private String empName;
private Country country;
private final Integer var;
}
尝试编译以下行时
Employee emp = new Employee();
然后,我得到了这个错误
requires argument to match Employee(Integer).
你的变量 var
是最终的。删除最后一个,以允许重新分配 var
引用。
你的 Integer var
是最终的。您只能在构造函数或初始化程序中设置最终变量。
所以在这种情况下,你不能使用 lombok 的构造函数,你需要先初始化你的最终变量
private final Integer var = someValue;
是的,它将限制无参数构造函数的使用,除非您初始化最终变量。如果您初始化最终变量,它将允许使用默认的无参数构造函数创建 class 的实例。但是不会为该最终变量生成 setter,但是会生成 getter。
即使我们使用 @NoArgsConstructor
,它也会抛出编译器错误说明,
final variable may not be initialized
.
简答
是,您被限制使用无参数构造函数创建 class 的实例。
长答案
@Data is a convenient shortcut annotation that bundles the features of
@ToString, @EqualsAndHashCode, @Getter / @Setter and
@RequiredArgsConstructor together
@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.
如您所知,如果您已经定义了自己的构造函数,Java 不会生成默认的无参数构造函数 - 通过使用 Lombok 的 @Data
注释,您已经定义了。
您可以显式添加 Lombok 的 @NoArgsConstructor
,但是:
@NoArgsConstructor will generate a constructor with no parameters. If
this is not possible (because of final fields), a compiler error will
result instead
如果我有一个 class 具有三个实例变量和一个实例最终变量。
是否会限制我使用无参数构造函数创建 class 的实例?
public @Data class Employee {
private Integer empId;
private String empName;
private Country country;
private final Integer var;
}
尝试编译以下行时
Employee emp = new Employee();
然后,我得到了这个错误
requires argument to match Employee(Integer).
你的变量 var
是最终的。删除最后一个,以允许重新分配 var
引用。
你的 Integer var
是最终的。您只能在构造函数或初始化程序中设置最终变量。
所以在这种情况下,你不能使用 lombok 的构造函数,你需要先初始化你的最终变量
private final Integer var = someValue;
是的,它将限制无参数构造函数的使用,除非您初始化最终变量。如果您初始化最终变量,它将允许使用默认的无参数构造函数创建 class 的实例。但是不会为该最终变量生成 setter,但是会生成 getter。
即使我们使用 @NoArgsConstructor
,它也会抛出编译器错误说明,
final variable may not be initialized
.
简答
是,您被限制使用无参数构造函数创建 class 的实例。
长答案
@Data is a convenient shortcut annotation that bundles the features of @ToString, @EqualsAndHashCode, @Getter / @Setter and @RequiredArgsConstructor together
@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.
如您所知,如果您已经定义了自己的构造函数,Java 不会生成默认的无参数构造函数 - 通过使用 Lombok 的 @Data
注释,您已经定义了。
您可以显式添加 Lombok 的 @NoArgsConstructor
,但是:
@NoArgsConstructor will generate a constructor with no parameters. If this is not possible (because of final fields), a compiler error will result instead