Tôi tìm thấy một phương pháp mới để kêu gọi nhiều phương pháp trong Java và tôi không thực sự hiểu những gì đang xảy ra đằng sau:Calling nhiều phương pháp trong 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;
}
}
Bây giờ lớp được khởi tạo sử dụng dòng này, và đây là nơi mà nó bị bối rối:
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();
Tất cả đều có ý nghĩa cho đến NutritionFacts.Build (int, int), sau đó, chính xác những gì đang xảy ra? Tại sao các phương thức calories
, sodium
, carbohydrate
từ lớp Trình dựng cần phải trả lại this
? Nơi mà lớp địa chỉ đó đi vào?
Cảm ơn bạn!
Điều này có nghĩa là giá trị trả về từ foo.calories (12), được sử dụng để gọi phương thức tiếp theo trong dòng , trong trường hợp của chúng ta, natri (35)? –
@ Cookie503 Tuyệt đối :) –
@ Cookie503 Chính xác. –