If the constructor or static factory of a class has multiple input parameters, you may not remember the corresponding properties of so many parameters when calling Object(1.0, 2.0, 3.0, 4.0, 5.0, 6.0). Moreover, if a class has more properties that need to be initialized, its constructor must also need more (still need to look like more parameters in the front) You need to implement a constructor with 1, 2,,, arguments.
Then this method may be able to change your troubles.
1. The classes to be constructed are as follows:
public class NutritionFacts {
//Required parameters
private final int servingSize;
private final int servings;
//Optional parameters
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder{//constructor
//Required parameters
private final int servingSize;
private final int servings;
//Optional parameters
private int calories=0;
private int fat =0;
private int sodium=0;
private int carbohydrate=0;
public Builder(int servingSzie,int serings) {
this.servingSize=servingSzie;
this.servings=serings;
}
public Builder calories(int calories) {
this.calories=calories;
return this;
}
public Builder fat(int fat) {
this.fat=fat;
return this;
}
public Builder sodium(int sodium) {
this.sodium=sodium;
return this;
}
public Builder carbohydrate(int carbohydrate) {
this.carbohydrate=carbohydrate;
return this;
}
public NutritionFacts builder() {
return new NutritionFacts(this);
}
}
public NutritionFacts(Builder builder) {
servingSize=builder.servingSize;
servings=builder.servings;
calories=builder.calories;
fat=builder.fat;
sodium=builder.sodium;
carbohydrate=builder.carbohydrate;
}
}
2. Call the generated object as follows:
public class Main {
public static void main(String[] args) {
//Set each parameter separately,
NutritionFacts nutritionFacts=new NutritionFacts.Builder(15, 20).
calories(1).carbohydrate(2).fat(3).sodium(4).builder();
}
}