作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class MyPojo{
String required;
Integer optionalOne;
Integer optionalTwo;
private MyPojo(Builder builder){
this.required = builder.required
this.optionalOne = builder.one;
this.optionalTwo = builder.two;
}
public static class Builder{
String required;
Integer optionalOne =0;
Integer optionalTwo =0;
public Builder(String req){
this.required = req;
return this;
}
public Builder optionalOne(Integer one){
this.one = one;
return this;
}
public Builder optionalTwo(Integer two){
this.two = two;
return this;
}
public MyPojo build(){
return new MyPojo(this);
}
}
}
然后这样调用:
MyPojo myPojo = new MyPojo.Builder("req").optionalOne(1).optionalTwo(2).build();
这一切都很可爱,但我不明白一些部分。
有两条New语句,一条在调用语句中,一条在build()
方法中,但只创建了一个新对象?
另外,如果我第二次调用,没有第二个可选参数:
MyPojo myPojo = new MyPojo.Builder("req").optionalOne(1).build();
为什么 optionTwo 会恢复为默认值(零)。并且不保留第一次传递的值(2),它是一个静态类,因此在所有 MyPojos 之间共享一个实例?
最佳答案
这一点:
new MyPojo().Builder("req")
应该是:
new MyPojo.Builder("req")
因此,您首先创建一个 Builder
,然后使用 Build
方法(顺便说一句,build
会更好)创建不可变对象(immutable对象)。
如果您创建第二个实例,它将与第一个实例完全分开。不要被声明为静态的 Builder
类所迷惑 - 这仅意味着 Builder
的实例没有隐式“父级”MyPojo
与其关联的类引用。单独的 Builder 实例的字段仍然完全独立。
关于java - 嵌套静态构建器类,对其管道的进一步解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7442103/
我刚开始使用 Dagger 2,想知道与我目前用来实现依赖注入(inject)的技术相比,它有什么优势。 目前,为了实现 DI,我创建了一个具有两种风格的项目:mock 和 prod。在这些风格中,我
我是一名优秀的程序员,十分优秀!