Lombok:如何指定一个arg构造函数?

bar*_*ara 13 java lombok

使用Lombok,是否可以指定一个arg构造函数?

我的目的是使用Lombok注释创建一个构造函数,如下所示.

class MyClass {
    private String param;
    private Integer count;

    public MyClass(String param) {
        this.param = param;
    }
}
Run Code Online (Sandbox Code Playgroud)

Knu*_*sen 13

我没有在文档中找到

怎么样:http://projectlombok.org/features/Constructor.html

您必须初始化所有不应该是构造函数的变量.

@RequiredArgsConstructor为每个需要特殊处理的字段生成一个带有1个参数的构造函数.所有未初始化的final字段都会获得一个参数,以及标记为@NonNull的任何字段,这些字段在声明它们时未初始化.对于标有@NonNull的字段,还会生成显式空检查.

所以下面应该创建一个argument(param)构造函数:

@RequiredArgsConstructor class MyClass {
     private String param;
     private Integer count = -1;
}
Run Code Online (Sandbox Code Playgroud)

  • @KnutKnutsen "RequiredArgsConstructor" 仅适用于最终字段。 (3认同)
  • 但是我不需要用构造函数设置`Integer count`。所以@RequiredArgsConstructor 不是我的情况。 (2认同)

maa*_*nus 12

Lombok不允许您准确指定字段,但有3个注释可供选择.同

@RequiredArgsConstructor class MyClass {
    private final String param;
    private Integer count;
}
Run Code Online (Sandbox Code Playgroud)

你可以的.如果没有内联和或初始化,则需要参数.final@NonNull

  • 对于所有可能会错过它的人来说,它是NonNull(自定义的龙目岛注释),而不是著名的@NotNull。我希望他们改用NotNull (2认同)

Hig*_*ana 9

@RequiredArgsConstructor@NonNull是解决上述问题的两个重要关键。因为@RequiredArgsConstructor创建了一个构造函数,其中的字段由@NonNull注释注释。

@RequiredArgsConstructor
class MyClass {
    @NonNull
    private String param;
    private Integer count;
}
Run Code Online (Sandbox Code Playgroud)

这相当于:

class MyClass {
    private String param;
    private Integer count;

    public MyClass(String param) {
        this.param = param;
    }
}
Run Code Online (Sandbox Code Playgroud)