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 ?
This bit:
should be:
So you first create a
Builder, and then theBuildmethod (which would be better asbuildbtw) creates the immutable object.If you create a second instance, that’s entirely separate from the first. Don’t be fooled by the
Builderclass being declared as static – that just means that an instance ofBuilderdoesn’t have an implicit “parent”MyPojoclass reference associated with it. The fields of separateBuilderinstances are still entirely separate.