Effective Java 第二条:遇到多个构造器参数时要考虑用构建器
来源:互联网 发布:淘宝mk著名原单店 编辑:程序博客网 时间:2024/05/16 15:26
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">对于Java处理多参数时,先给大家上两个程序员平时最喜爱用的写法:</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">第一:重叠构造器</span>
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 NutritionFacts(int servingSize, int servings) { this(servingSize,servings,0); } public NutritionFacts(int servingSize, int servings, int calories) { this(servingSize,servings,calories,0); } public NutritionFacts(int servings, int servingSize, int caloriesm, int fat) { this(servings,servingSize,caloriesm,fat,0); } public NutritionFacts(int calories, int fat, int servings, int servingSize, int sodium) { this(calories,fat,servings,servingSize,sodium,0); } public NutritionFacts(int calories, int servingSize, int servings, int fat, int sodium, int carbohydrate) { this.calories = calories; this.servingSize = servingSize; this.servings = servings; this.fat = fat; this.sodium = sodium; this.carbohydrate = carbohydrate; }}
NutritionFacts facts = new NutritionFacts(12,34,2,5,3,5);
第二:JavaBean模式
public class NutritionFactsJavaBean { //JavaBean模式 private int servingSize; private int servings; private int calories; private int fat; private int sodium; private int carbohydrate; public NutritionFactsJavaBean() { } public void setCalories(int calories) { this.calories = calories; } public void setCarbohydrate(int carbohydrate) { this.carbohydrate = carbohydrate; } public void setFat(int fat) { this.fat = fat; } public void setServings(int servings) { this.servings = servings; } public void setServingSize(int servingSize) { this.servingSize = servingSize; } public void setSodium(int sodium) { this.sodium = sodium; }}
NutritionFactsJavaBean factsJavaBean = new NutritionFactsJavaBean(); factsJavaBean.setCalories(34); factsJavaBean.setCarbohydrate(33); factsJavaBean.setFat(333); factsJavaBean.setServings(345);
以上两种构造器弊端总结:重叠构造器模式可行,但是当有许多参数时,客户端代码会很难编写,难以阅读。JavaBean模式类无法仅仅通过检验构造器参数的有效性保持一致性,并且导致线程不安全。综上,遇到多参数时,统一推荐大家使用构建器,既能有重叠构造器的安全,又能有JavaBean模式的可读性。
遇到多参数,推荐使用构建器:
public class NutritionFactsBuilder { //构建器模式 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{ private final int servingSize; private final int servings; private int calories = 0; private int fat = 0; private int sodium = 0; private int carbohydrate = 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 sodium(int val){ sodium = val; return this; } public Builder carbohydrate(int val){ carbohydrate = val; return this; } public NutritionFactsBuilder build(){ return new NutritionFactsBuilder(this); } } private NutritionFactsBuilder(Builder builder){ servings = builder.servings; servingSize = builder.servingSize; calories = builder.calories; fat = builder.fat; sodium = builder.sodium; carbohydrate = builder.carbohydrate; }}
客户端调用:
NutritionFactsBuilder builder = new NutritionFactsBuilder.Builder(12,34) .calories(44) .carbohydrate(55) .fat(456) .sodium(23) .build();
以上内容整理自《Effective Java》。大家最好运行代码感受一下喔。
0 0
- Effective Java第二条:遇到多个构造器参数时要考虑用构建器
- Effective Java 第二条:遇到多个构造器参数时要考虑用构建器
- Effective java第二条:遇到多个构造器参数时要考虑用构造器
- 《Effective java》读书记录-第2条-遇到多个构造器参数时要考虑用构建器
- 第二条:遇到多个构造器参数时要考虑用构建器
- 第二条:遇到多个构造器参数时要考虑用构建器
- 第二条:遇到多个构造参数时要考虑用构建器
- Effective Java (2) - 遇到多个构造器参数时要考虑用构建器
- Effective-Java学习笔记 遇到多个构造器参数时要考虑用构建器
- effective java(一)遇到多个构造器参数 时要考虑用构建器
- effective java(2) 之遇到多个构造器参数时要考虑用构建器
- Effective Java -- 遇到多个构造器参数时要考虑用构建器(Builder)
- [Effective Java] 第2条 遇到多个构造器参数时要考虑用构造器
- effective java读书札记值第2条:遇到多个构造器参数时要考虑用构造器
- 第二条建议:遇到多个构造器参数时需要考虑构建器
- 遇到多个构造器参数时要考虑用构建器——Effective Java 读书笔记
- Effective Java 2.2——遇到多个构造器参数时要考虑用构建器
- Effective Java 创建和销毁对象 2.遇到多个构造器参数时要考虑用构建器
- servlet学习(五)
- 多线程模型下的无锁编程
- Android最佳实践之触摸手势
- 安卓学习笔记之自定义Toast
- python面向对象
- Effective Java 第二条:遇到多个构造器参数时要考虑用构建器
- LeetCode 88. Merge Sorted Array
- android:代码中动态添加子布局
- Android里的网格空隙
- EditText设置圆角
- linux基础学习之 gsoap calc 例程(2)
- CAS原子操作实现无锁及性能分析
- servlet 学习(六)
- 什么是泛型