在你的自定义构造函数中使用Builder注解,如下所示:
如果您想对所有构造使用相同的builder() 方法:
import java.time.LocalDateTime;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Foo {
private String message;
private Integer status;
private LocalDateTime timestamp = LocalDateTime.now();
@Builder
public Foo(Integer status, String message, Exception exception) {
this.status = status;
if(Objects.nonNull(exception)) {
this.message = exception.getMessage();
} else {
this.message = message;
}
}
}
例子:
Foo foo1 = Foo.builder().exception(new Exception("Message")).status(100).build();
Foo foo2 = Foo.builder().message("Test").status(100).build();
如果你想使用完全不同的结构:
import java.time.LocalDateTime;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Foo {
private String message;
private Integer status;
@Builder.Default
private LocalDateTime timestamp = LocalDateTime.now();
@Builder(builderClassName = "FooBuilder1", builderMethodName = "builder1")
public Foo(Integer status, Exception exception) {
this.status = status;
if(Objects.nonNull(exception)) {
this.message = exception.getMessage();
}
this.timestamp = LocalDateTime.now();
}
}
创建对象时:
Foo foo1 = Foo.builder1().exception(new Exception("message")).status(100).build();
Foo foo2 = Foo.builder().message("Test").status(100).build();
注意:除非您使用不同的构建器类名和构建器方法,如上例所示,否则两个 @Builder 注释将不起作用。