Effective In Java 笔记之构建器

Effective in java 中推荐一种叫构建器的方法, 其实质就是在类中创建一个静态内部类来完成对元素值的注入,effective in java 中推荐当参数多于四个的时候使用此方式, 下面上代码。
public class NutritionsFacts {
private int servingSize;
private int servings;
private int calories;
private int fat;
private int sodium;
private int carbohydrate;

public static class Builder {
private int servingSzie;
private int servings;
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;

public Builder(int servingSize, int servings) {
this.servingSzie = 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 NutritionsFacts build() {
return new NutritionsFacts(this);
}
}

public NutritionsFacts(Builder builder) {
servingSize = builder.servingSzie;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}

public static void main(String[] args) {
NutritionsFacts cocaCola = new NutritionsFacts.Builder(240, 8)
.calories(100).sodium(35).carbohydrate(27).build();
System.out.println(cocaCola.toString());
}

@Override
public String toString() {
return "[" + servingSize + " , " + servings + ", " + calories + ", "
+ fat + ", " + sodium + ", " + carbohydrate + "]";
}
}


我自己写了一种方式,我觉得和上面的没有什么区别,而 effective in java 上说,这种方式很容易产生潜在的错误, 因为要设置的参数太多了, 所以会出现漏掉,造成空指针异常神马的, 哎, 不管了。看个人爱好了。上码:
public class MyNutritionsFacts {
private int servingSize;
private int servings;
private int calories;
private int fat;
private int sodium;
private int carbohydrate;

public int getServingSize() {
return servingSize;
}

public MyNutritionsFacts setServingSize(int servingSize) {
this.servingSize = servingSize;
return this;
}

public int getServings() {
return servings;
}

public MyNutritionsFacts setServings(int servings) {
this.servings = servings;
return this;
}

public int getCalories() {
return calories;
}

public MyNutritionsFacts setCalories(int calories) {
this.calories = calories;
return this;
}

public int getFat() {
return fat;
}

public MyNutritionsFacts setFat(int fat) {
this.fat = fat;
return this;
}

public int getSodium() {
return sodium;
}

public MyNutritionsFacts setSodium(int sodium) {
this.sodium = sodium;
return this;
}

public int getCarbohydrate() {
return carbohydrate;
}

public MyNutritionsFacts setCarbohydrate(int carbohydrate) {
this.carbohydrate = carbohydrate;
return this;
}

public static void main(String[] args) {
MyNutritionsFacts m = new MyNutritionsFacts().setCalories(10)
.setCarbohydrate(20).setFat(30).setServings(40)
.setServingSize(50).setSodium(60);
}
}


请多多指教。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值