当使用生成器模式时,我们如何添加额外的构造函数



我想添加一个额外的结构,它将Exception, status作为参数并构造message as = exception.getMessage();

鉴于我们使用龙目岛生成器模式,我们如何做到这一点

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Foo {
private String message;
private Integer status;

@Builder.Default
private LocalDateTime timestamp = LocalDateTime.now();
}

在自定义构造函数中使用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注释将不起作用,除非您使用不同的构建器类名和构建器方法,如上例所示。

最新更新