1

我处于将静态字段变量引用到自定义类的位置。我需要使用它引用的类中的方法对变量进行更改。我无法实例化正在构建的类。简化示例:

public class House {
  private static MaterialsRequired matsReq = new MaterialsRequired();
  private String size;

  private House(String size) {
    this.size = size;
  }

  public static MaterialsRequired getMaterialsRequired() {

  }

  public static void Build(String size) {
    new House(size); //Do I need to put 'this(size)' here?
    //some code here to expend the materials required factored based on size.
  }

要建造房子,我需要知道所需的材料(标准尺寸)。要知道需要的材料,我需要调用 MaterialsRequired 的 addMaterial() 方法。我该怎么办?

编辑:我需要在 matsReq 上重复调用 addMaterial() 方法。也许十次。当我调用 House.build() 时,我希望 matsReq 已被方法调用更改(如果我的问题不具体)。此外,每次调用 build() 或 getMaterialsRequired() 方法时只设置所需的材料也不能让我满意。

问题已经回答了!解决方案:

  private static MaterialsRequired matsReq = new MaterialsRequired();
  static {
    matsReq.addMaterial(mat1);
    matsReq.addMaterial(mat2);
    matsReq.addMaterial(mat3);
  }
  private String size;
4

3 回答 3

0

做一些猜测...

public class StandardHouse{
  public static MaterialsList MATERIALS_REQUIRED = new MaterialsList();
  MATERIALS_REQUIRED.add("material", numMats);
  ...

  public StandardHouse() {
    //probably don't need anything here
  }
}

然后稍后

MaterialsList matsYouHave = ...;
StandardHouse house1 = new StandardHouse();
matsYouHave.remove(StandardHouse.MATERIALS_REQUIRED);
于 2013-09-14T21:23:41.207 回答
0

拥有一个构建方法是行不通的,因为它只是另一个构造函数。当你创建一个实例时会发生这种情况。我猜,如果有的话,你建立在课堂之外。它会调用构造函数并执行其他一些操作。

您可能想要的是,在类之外,创建房屋实例的方法(使用构造函数),然后使用一些代码“用尽”从容纳材料的结构中制造房屋所需的材料(再次,课外)。

既然您似乎想建造具有不同材料要求的房屋,为什么不制作具有不同所需材料清单的最基本房屋的子类(或者更好的是抽象类,可能称为“住宅”)。

于 2013-09-14T20:34:42.837 回答
-1

试着把它们分成两个班

public class House {

  private List<String> materialList = new ArrayList<String>();
  private House(List<String> materialList ) {
    this.materialList = materialList ;
  }



  public void Build() {
    MaterialsRequired matsReq = new MaterialsRequired();
    materialList .add(matsReq.setMaterialsRequired("material1"));
    materialList .add(matsReq.setMaterialsRequired("material2"));
    materialList .add(matsReq.setMaterialsRequired("material3"));
    //some code here to expend the materials required factored based on size.
  }

接着

class MaterialRequired
 {
    private String materialsRequired;

    public String setMaterialsRequired(String material) {
        materialRequired = material;
        return materialRequired;
  }
于 2013-09-14T20:35:04.340 回答