Вызов нескольких методов в Java

Я нашел новый способ вызова нескольких методов в Java, и я действительно не понимаю, что происходит за ним:

public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;

public static class Builder {
    // Required parameters
    private final int servingSize;
    private final int servings;
    // Optional parameters - initialized to default values
    private int calories      = 0;
    private int fat           = 0;
    private int carbohydrate  = 0;
    private int sodium        = 0;
    public Builder(int servingSize, int servings) {
        this.servingSize = servingSize;
        this.servings    = servings;
    }
        public Builder calories(int val)
            { calories = val;      return this; }
        public Builder fat(int val)
            { fat = val;           return this; }
        public Builder carbohydrate(int val)
            { carbohydrate = val;  return this; }
        public Builder sodium(int val)
            { sodium = val;        return this; }
        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
}  

    private NutritionFacts(Builder builder) {
        servingSize  = builder.servingSize;
        servings     = builder.servings;
        calories     = builder.calories;
    }

}

Теперь экземпляр класса создается с помощью этой строки, и вот что сбивает с толку:

NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();

Это все имеет смысл до NutritionFacts.Build (int, int), после чего, что именно происходит? Почему методы калорий , натрия , углеводов из класса Builder должны возвращать это ? Куда идет адрес этого класса?

Спасибо!

7
задан Mihai Neacsu 26 October 2011 в 23:45
поделиться