- 链式调用(手动实现方式)
- 直接上代码
//
public class Condition {
private String str1;
private String str2;
private String str3;
private String str4;
private String str5;
private String str6;
private String str7;
private String str8;
private String str9;
private String str10;
// 私有构造器,限制了在外部直接创建实例
private Condition(Builder Builder) {
this.str1 = Builder.str1;
this.str2 = Builder.str2;
this.str3 = Builder.str3;
this.str4 = Builder.str4;
this.str5 = Builder.str5;
this.str6 = Builder.str6;
this.str7 = Builder.str7;
this.str8 = Builder.str8;
this.str9 = Builder.str9;
this.str10 = Builder.str10;
}
// 静态内部类
public static class Builder{
private String str1;
private String str2;
private String str3;
private String str4;
private String str5;
private String str6;
private String str7;
private String str8;
private String str9;
private String str10;
public Builder setStr1(String str1) {
this.str1 = str1;
return this;
}
public Builder setStr2(String str2) {
this.str2 = str2;
return this;
}
public Builder setStr3(String str3) {
this.str3 = str3;
return this;
}
public Builder setStr4(String str4) {
this.str4 = str4;
return this;
}
public Builder setStr5(String str5) {
this.str5 = str5;
return this;
}
public Builder setStr6(String str6) {
this.str6 = str6;
return this;
}
public Builder setStr7(String str7) {
this.str7 = str7;
return this;
}
public Builder setStr8(String str8) {
this.str8 = str8;
return this;
}
public Builder setStr9(String str9) {
this.str9 = str9;
return this;
}
public Builder setStr10(String str10) {
this.str10 = str10;
return this;
}
// 通过静态类创建外部类实例
public Condition build(){
return new Condition(this);
}
}
// 为外部类提供getter方法
...
// 为外部类提供setter方法
...
}
public static void main(String[] args) {
// 创建对象
Condition condition = new Condition.Builder()
.setStr1("aa")
.setStr2("bb")
.setStr3("cc")
.build();
}
- 链式调用(借助 lombok 插件实现)
- 上代码,不解释
@Setter
@Getter
@Builder
public class Demo {
private String name;
private Integer age;
private String address;
}
public static void main(String[] args) {
// 创建对象
Demo demo = Demo.builder()
.name("小明")
.age(28)
.address("徐州")
.build();
}
注:TMD,真的是不要太简单;不过从调用方式看似乎和我们手动写的有点差别,我们看看它编译后的文件:
public class Demo {
private String name;
private Integer age;
private String address;
Demo(String name, Integer age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public static Demo.DemoBuilder builder() {
return new Demo.DemoBuilder();
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
public String getName() {
return this.name;
}
public Integer getAge() {
return this.age;
}
public String getAddress() {
return this.address;
}
public static class DemoBuilder {
private String name;
private Integer age;
private String address;
DemoBuilder() {
}
public Demo.DemoBuilder name(String name) {
this.name = name;
return this;
}
public Demo.DemoBuilder age(Integer age) {
this.age = age;
return this;
}
public Demo.DemoBuilder address(String address) {
this.address = address;
return this;
}
public Demo build() {
return new Demo(this.name, this.age, this.address);
}
public String toString() {
return "Demo.DemoBuilder(name=" + this.name + ", age=" + this.age + ", address=" + this.address + ")";
}
}
}
可以看出,它的实现方式稍微不一样,我们手动写的方式是直接通过 new获取静态内部类对象;而使用lombok,它是把这个过程封装在了一个静态方法中,直接调用静态方法就可以了
- 推荐:
- IntelliJ IDEA 2017 中集成 lombok https://blog.csdn.net/m0_37524661/article/details/81670131
- lombok下载 https://download.csdn.net/download/m0_37524661/10605567