use*_*823 51 java syntax constructor field lombok
如果我使用Lombok指定@AllArgsConstructor,它将生成一个构造函数,用于设置所有声明的(非最终的,非静态的)字段.是否可以省略某些字段,这会为所有其他字段留下生成的构造函数?
Roe*_*ker 74
不,这是不可能的.有一个功能请求可以创建一个@SomeArgsConstructor,您可以在其中指定所涉及字段的列表.
完全披露:我是Lombok开发的核心项目之一.
Shu*_*nia 13
这可以使用 Lombok 中的两个注释来完成:
请查找示例如下:
package com.ss.model;
import lombok.*;
@Getter
@Setter
@RequiredArgsConstructor
@ToString
public class Employee {
private int id;
@NonNull
private String firstName;
@NonNull
private String lastName;
@NonNull
private int age;
@NonNull
private String address;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以创建一个对象,如下所示:
Employee employee = new Employee("FirstName", "LastName", 27, "Address");
Run Code Online (Sandbox Code Playgroud)
enk*_*ara 11
在某些情况下绕过它的一个好方法是使用 @Builder
以防万一它有帮助,初始化的final
字段被排除在外。
@AllArgsConstructor
class SomeClass {
final String s;
final int i;
final List<String> list = new ArrayList<>(); // excluded in constructor
}
var x = new SomeClass("hello", 1);
Run Code Online (Sandbox Code Playgroud)
这对于集合或其他可变类尤其有意义。
此解决方案可以与此处的其他解决方案一起使用,关于使用@RequiredArgsConstructor
:
@RequiredArgsConstructor
class SomeClass2 {
final String s;
int i; // excluded because it's not final
final List<String> list = new ArrayList<>(); // excluded because it's initialized
}
var x = new SomeClass2("hello");
Run Code Online (Sandbox Code Playgroud)