如果我使用Lombok指定@AllArgsConstructor,它将生成一个构造函数来设置所有声明的(不是最终的,不是静态的)字段。是否可以省略某些字段,并为所有其他字段留下生成的构造函数?
问问题
82755 次
5 回答
159
不,那是不可能的。有一个功能请求来创建一个@SomeArgsConstructor
您可以指定所涉及字段列表的位置。
全面披露:我是 Lombok 项目的核心开发人员之一。
于 2014-05-21T08:44:13.353 回答
137
或者,您可以使用@RequiredArgsConstructor
. 这为所有字段添加了一个构造函数 要么@NonNull
要么final
。
请参阅文档
于 2016-12-19T09:50:26.343 回答
13
在某些情况下绕过它的一个好方法是使用@Builder
于 2018-09-18T15:31:52.300 回答
12
以防万一它有帮助,初始化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);
这对于集合或其他可变类尤其有意义。
此解决方案可以与此处的其他解决方案一起使用,关于使用@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");
于 2020-12-17T08:07:18.410 回答
6
这可以使用lombok @RequiredArgsConstructor和@NonNull中的两个注释来完成。
请找到如下示例
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;
}
然后您可以创建一个构造函数,如下所示
Employee employee = new Employee("FirstName", "LastName", 27, "Address");
于 2021-06-24T15:44:34.940 回答