[英]execute code in java fields
我處於將靜態字段變量引用到自定義類的位置。 我需要使用其引用的類中的方法對變量進行更改。 我無法實例化正在構建的課程。 簡化示例:
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;
擁有構建方法不起作用,因為它只是另一個構造函數。 創建實例時會發生這種情況。 我猜,如果有的話,您的成長將超出班級范圍。 這將是所謂的構造函數,並做了其他幾件事。
您可能想要的是,在類之外,使用一種方法來創建房屋的實例(使用構造函數),然后使用一些代碼“用完”從容納物料的結構中建造房屋所需的物料(再次) ,在課程之外)。
由於您似乎想建造具有不同材料要求的房屋,所以為什么不創建具有不同要求材料清單的最基本房屋的子類(或者更好的是,抽象類,也可能稱為“住宅”)。
做一些猜測...
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);
嘗試將它們分為兩類
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.