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);
}
}
}
Which is then called like this :
MyPojo myPojo = new MyPojo.Builder("req").optionalOne(1).optionalTwo(2).build();
Which is all lovely, but I don't understand a couple of parts.
There are two New statements one in the calling statement and one in the build()
method, but there is only one new object created ?
Also, if I then call a second time , without second optional paremeter :
MyPojo myPojo = new MyPojo.Builder("req").optionalOne(1).build();
Why will optionalTwo revert back to default value (zero). And not keep the value passed in first time(2), its a static class so one instance shared between all MyPojos ?