为什么我可以链setter与一个类与构建器类内部,但不能在一个正常的类的实例?



我是在学习java的时候接触到builder模式的,但是我不明白builder是怎么把setter方法链起来的

//this one compiles
new AlertDialog.Builder().setApplyButton("apply").setText("stop");

//this one doesn't compile
new NormalAlert().setApplyButton("apply").setText("stop");

生成器方法返回this(生成器实例本身),以便可以在其上调用更多方法。通常,定义名为build的方法来返回构造的对象。

的例子:

public class Person {
private String name;
private Integer age;
public static class Builder {
private String name;
private Integer age;

public Builder name(String name){
this.name = name;
return this;
}
public Builder age(Integer age){
this.age = age;
return this;
}
public Person build() {
return new Person(this);
}
}
private Person(Builder builder) {
this.name = builder.name; 
this.age = builder.age;     
}
}

因为在普通的类设置器中通常返回void你不能在void类型上调用另一个类设置器

构建器模式的简单演示如下

public class Alert {
String prop1;
String prop2;
Alert(AlertBuilder builder){
this.prop1 = builder.prop1;
this.prop2 = builder.prop2;
}
}
class AlertBuilder{
String prop1;
String prop2;
public AlertBuilder setProp1(String prop1) {
this.prop1 = prop1;
return this;
}
public AlertBuilder setProp2(String prop2) {
this.prop2 = prop2;
return this;
}
public Alert build(){
return new Alert(this);
}
}

在这里你有你的主类和一个构建器类。构建器模式会不断更新自己,当您准备好构建"真正的"构建器时,对象,您调用构建方法并一次获取所有字段。如果你感兴趣,我建议你阅读更多关于Builder设计模式的内容。

相关内容

  • 没有找到相关文章

最新更新