在我的项目中,我获得了下面给出的课程。无论何时创建Flat对象,数组flats
都会增加一个扁平对象。我的问题是每次创建平面对象时如何增加此数组。
我真的坚持下去了。不知道从哪里开始!
THX!
public class Block {
public Block() {
super();
flats = new Flat[0];
}
Flat[] flats;
class Flat {
Room[] rooms;
class Room {
private int width;
private int height;
private int numWindow;
public Room(int w, int h, int n) {
super();
this.width = w;
this.height = h;
this.numWindow = n;
}
@Override
public String toString() {
return width + "/" + height + "/" + numWindow;
}
}
public Flat() {
super();
rooms = new Room[0];
}
}
}
答案 0 :(得分:1)
Flat
是Block
的内部类,因此,flats
成员变量可以从Flat
类直接访问。
根据文件:
与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。
您可以像这样修改Flat
构造函数:
public Flat() {
super();
rooms = new Room[0];
// append the newly created flat into the flats array
flats = Arrays.copyOf(flats, flats.length + 1);
flats[flats.length - 1] = this;
}
这意味着将为每个新单元复制平面数组,这可能比使用ArrayList效率低得多。
虽然这有效,但我强烈建议不要使用深层嵌套的类结构,并使用更好的依赖关系和所有权模型。但这超出了这个问题的范围。
答案 1 :(得分:0)
你能把这个数组发送给Flat的构造函数吗?
代码(基于您的代码):
public class Block {
private Flat[] flats;
public Block(Flat[] flats) {
this.flats = flats;
}
public Flat[] getFlats() {
return flats;
}
public void setFlats(Flat[] flats) {
this.flats = flats;
}
@Override
public String toString() {
return Arrays.toString(flats);
}
public class Flat {
private String value;
public Flat() {
//init your Flat
this.value = UUID.randomUUID().toString();
flats = Arrays.copyOf(flats, flats.length + 1);
flats[flats.length - 1] = this;
}
@Override
public String toString() {
return value;
}
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Test");
Block block = new Block(new Block.Flat[0]);
block.new Flat();
block.new Flat();
System.out.println(block.toString());
}
}
输出: [b30c54dd-7e5d-46bc-81cf-18172e68337e,c22c4589-7563-4ada-a4eb-16226bd81f45]
答案 2 :(得分:0)
将flats数组定义为类Block的静态成员,并在Flat的构造函数中推送新创建的对象。
答案 3 :(得分:0)
如果你只想计算对象,你不需要一个数组,你可以使用一个名为“让NumOfObjects”的静态字段,并在每次创建构造函数时递增它。 但是,如果您希望将对象保存在数组中,我建议您在这种情况下使用ArrayList(作为Flat类中的静态字段)(documentation)而不是数组,因为java中的数组大小固定,您和# 39; ll必须创建一个具有固定初始大小的数组,并且在Flat构造函数中,您应该检查数组是否已满,您应该创建更大的数组,复制旧数组,并添加新对象。 ArrayList负责处理所有这些而不是你。