zoukankan      html  css  js  c++  java
  • 2、遇到多个构造器参数的时候要考虑使用构建器

    来自《effective 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{
    private int servingSize;
    private int servings;
    private int calories;
    private int fat;
    private int sodium;
    private int carbohydrate;

    public Builder(int servingSize, int servings) {
    this.servingSize = servingSize;
    this.servings = servings;
    }
    public Builder setCalories(int val){
    calories=val;
    return this;
    }
    public Builder setFat(int val){
    fat=val;
    return this;
    }
    public Builder setSodium(int val){
    sodium=val;
    return this;
    }
    public Builder setCarbohydrate(int val){
    carbohydrate=val;
    return this;
    }
    public NutritionFacts builder(){
    return new NutritionFacts(this);
    }
    }
    private NutritionFacts(Builder builder){
    fat=builder.fat;
    servings=builder.servings;
    servingSize=builder.servingSize;
    calories=builder.calories;
    sodium=builder.sodium;
    carbohydrate=builder.carbohydrate;
    }

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


    public static void main(String[] args) {
    NutritionFacts nutritionFacts = new Builder(1, 2)
    .setCalories(3)
    .setCarbohydrate(4)
    .setFat(5)
    .setSodium(6)
    .builder();
    System.out.println(nutritionFacts.toString());
    }
    }

    类中含有多个变量,但是每次使用的时候需要使用不同的构造函数初始化。

    首先需要在类中定义一个静态的内部类,静态内部类还有的变量和外部类相同,

    在内部类中定义每个函数的set方法,注意每次set的时候需要返回当前的builder对象以便下次继续执行后面对应函数成员变量的set方法。

    最后使用内部类的build()函数,函数返回的是外部类对象,这时候内部类的成员变量都有我们想要初始化的值,所以在内部类的build()函数中new一个外部类的实例并返回,

    这时候注意需要重写外部类的构造函数,函数里传递的是内部类对象,使用内部类已经初始化的变量初始化外部类的变量

  • 相关阅读:
    ELK 5.6.8 安装部署
    Port Forwarding in Windows
    python 压缩文件为zip后删除原文件
    Windows安装nginx服务
    redis 启动停止脚本
    使用sed替换指定文件指定行的指定文本
    auto和bool
    宽字符
    函数递归
    关于主机用户名显示为"-bash-4.1$"
  • 原文地址:https://www.cnblogs.com/feixiangdecainiao/p/10618198.html
Copyright © 2011-2022 走看看