有效的Java:Builder模式
我正在阅读有效的java项目#2——构建器模式 这里说JavaBean不是创建具有多个参数的对象的有效方法。 但是如果我用这种方式使用javabean呢:有效的Java:Builder模式,java,builder,factory-pattern,effective-java,Java,Builder,Factory Pattern,Effective Java,我正在阅读有效的java项目#2——构建器模式 这里说JavaBean不是创建具有多个参数的对象的有效方法。 但是如果我用这种方式使用javabean呢: // JavaBeans Pattern public class NutritionFacts { private final int servingSize ; private final int servings ; private final int calories; private final int fat; privat
// JavaBeans Pattern
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() { }
// Setters
public void setServingSize(int val) { servingSize = val; }
public void setServings(int val) { servings = val; }
public void setCalories(int val) { calories = val; }
public void setFat(int val) { fat = val; }
public void setSodium(int val) { sodium = val; }
public void setCarbohydrate(int val) { carbohydrate = val; }
}
NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);
注意,我将所有成员变量作为最终变量
现在可以通过以下方式创建实例:
// JavaBeans Pattern
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() { }
// Setters
public void setServingSize(int val) { servingSize = val; }
public void setServings(int val) { servings = val; }
public void setCalories(int val) { calories = val; }
public void setFat(int val) { fat = val; }
public void setSodium(int val) { sodium = val; }
public void setCarbohydrate(int val) { carbohydrate = val; }
}
NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);
如果我这样做有什么不对?有人能帮我理解吗?
谢谢
Rajan您甚至还没有尝试编译此文件,因为很不幸,它将失败。这是因为您声明了一个变量final,它必须在构造函数完成时初始化
这就是为什么最终变量上的setter毫无意义,也就是为什么经常使用Builder模式来解决这个问题。您甚至没有尝试编译它,因为不幸的是它会失败。这是因为您声明了一个变量final,它必须在构造函数完成时初始化
这就是为什么最终变量上的setter毫无意义,也就是为什么经常使用Builder模式来解决这个问题。这本书主要说JavaBeans在创建实例时不是线程安全的。它还建议您将可选(非主要)属性的初始化过程放到生成器中。另一件事是,在将代码放在这里之前,您应该测试代码。这本书主要说,当您创建实例时,JavaBeans不是线程安全的。它还建议您将可选(非主要)属性的初始化过程放到生成器中。另一件事是,您应该在将代码放到这里之前测试它。