如何在构造函数中引用给定名称的对象,我不知道该名称是什么?

时间:2016-06-22 20:11:30

标签: java constructor getter-setter

我有一个名为Chef的类,其中有三个构造函数。就像这样:

public Chef(String chefName, double noodleStock) {
    this.chefName = chefName;
    this.noodleStock = noodleStock;
    this.bowlsCooked = 0;
}
public Chef(String chefName, double noodleStock, double vegStock) {
    this.chefName = chefName;
    this.noodleStock = noodleStock;
    this.vegStock = vegStock;
    this.bowlsCooked = 0;
}
public Chef(String chefName, double noodleStock, double vegStock,
    double porkStock) {
    this.chefName = chefName;
    this.noodleStock = noodleStock;
    this.vegStock = vegStock;
    this.porkStock = porkStock;
    this.bowlsCooked = 0;
}

在一个为每个厨师储存的方法中,我需要setNoodleStock,例如,通过在当前库存中添加一个值。

如何确保引用正确的厨师?每个厨师之间的唯一区别将是他们的名字和他们的构造函数中的args数量。

3 个答案:

答案 0 :(得分:0)

通过跟踪它们,你知道正确的厨师。

Chef chef1 = new Chef(...);
Chef chef2 = new Chef(...);
Chef chef3 = new Chef(...);

与您使用的构造函数无关。然后将库存添加到chef2,您可以使用

chef2.addNoodleStock(amount);

当然,你必须编写方法addNoodleStock()。

答案 1 :(得分:0)

假设您在Chef类中定义了setNoodleStock()方法,即

public class Chef {

   ... instance variables ...

   public Chef(String chefName, double noodleStock) {
       ...
   }

   public Chef(String chefName, double noodleStock, double vegStock) {
       ...
   }

   public Chef(String chefName, double noodleStock, double vegStock,
       double porkStock) {
       ...
   }

   public void setNoodleStock(double stock) {
      this.noodleStock = stock;
   }

}

稍后,当您创建Chef个对象时,无论您调用哪个setNoodleStock(),都会设置其库存:

Chef chef1 = new Chef("First Chef", 2.0);

Chef chef2 = new Chef("Second Chef", 1.0);

chef1.setNoodleStock(4.0); // chef1 now has 4.0 noodles, chef2 still has 1.0

chef2.setNoodleStock(5.0); // chef1 has 4.0 noodles from above, chef2 now has 5.0

答案 2 :(得分:0)

  

如何确保引用正确的厨师?

如果你实际上有一个Chef实例的引用,那就完成了。使用不同的构造函数不会改变Chef实例的任何内容。

如果您需要Chef引用String name,那么您可能应该使用Map<String, Chef>

Chef joe = new Chef("joe", 0);
Map<String, Chef> chefs = new HashMap<String, Chef>();
chefs.put(joe.getName(), joe);

其他地方......

Chef joe = chefs.get("joe");

但是,在那时,为什么不直接使用已经用名称声明的Chef joe实例?