创建数组的对象的Static Array.这是好还是坏?



可以看到,我已经在Corner对象中创建了(实例化了?)一个Corner对象的静态数组。这种形式好吗?我希望所有的Corner对象都能访问所有其他的Corner对象。

package Main;
public class Corner {
private String biome;
private static Corner[][] corners;
private float elevation, moisture, heat;
private boolean isRiver, isLake;
private int x, y;
public void createArray(int width, int height) {
    corners = new Corner[width][height];
}
public String getBiome() { return biome; }
public void setBiome(String biome) {
    this.biome = biome;
}
public float getElevation() { return elevation; }
public void setElevation(float elevation) {
    this.elevation = elevation;
}
public float getMoisture() {
    return moisture;
}
public void setMoisture(float moisture) {
    this.moisture = moisture;
}
public float getHeat() { return heat; }
public void setHeat(float heat) { this.heat = heat; }
public boolean isRiver() {
    return false;
}
public boolean isLake() {
    return false;
}
public static Corner[][] getCorners() {
    return corners;
}
}

没有更多的细节要添加

如果Corner s的数量发生变化,您需要创建一个新的更大的数组,并将所有Corner s从旧数组复制到新的更大的数组。这应该向您表明,您可能希望使用与数组不同的数据结构。能像ListSet一样生长的植物

一般来说,Corner不需要知道其他Corner。一个不同的类型应该管理所有的Corner,并处理它们之间的依赖关系。

您没有写为什么 '我希望所有Corner对象都能访问所有其他Corner对象',所以我无法推荐这种管理类型的外观。

首先,不要接受Kevin所说的,你应该改变

public void createArray(int, int);

public static void createArray(int, int);

我不明白需要一个二维数组来访问其他Corner对象。

数组也不是动态分配的好结构类型。List是更好的选择,在本例中是List。所以你应该把它实现为-

你应该创建一个列表-

private static List<Corner>;

一般来说,static是良好的OO设计中的异常。只有在有很好的理由的情况下才使用它。

你的例子看起来不像这样。你看,你把不该在一起的东西弄混了。一个"角落"就是一个"角落"。它不知道其他"角落"。

在您实际创建的模型中,您有一些以复数形式处理角的"封闭"事物。这个封闭的东西可以有一些List<Corner>字段,用于跟踪属于封闭实体的所有Corner对象。

static通常看起来是解决此类问题的简单、方便的方法。但在现实中,这样做只会产生很多问题。它最初可以工作,但一旦您试图增强您的程序,它就会中断。

这是好形式吗?

有两个原因:-

原因1:- 单一责任原则。每个对象都应该对自己的关注点负责。所以角对象并不关心维护其他角对象的列表。维护边角对象可以放在某个util类方法或维护边角缓存的单例对象下(这也很容易测试)

原因二:- 单元测试。假设您想为静态方法编写单元测试,除非您提供任何提供静态模拟的第三方库,如jmockit,

最新更新