2016-09-26 6 views
1

ご覧のとおり、オブジェクト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; 
} 
} 

追加する詳細はありません。

+1

のような静的な疑似関数を提供するサードパーティ製のライブラリを提供しないかぎり、簡単に行うことはできません。 'createArray(int、int)'の配列は意味がないようです。別の注意として、すべての 'Corner'インスタンスを追跡したい場合は' static 'createCornerメソッドも含めるべきです。これは 'corner'配列を管理し、' Corner'インスタンスを作成する唯一の方法です。 – SomeJavaGuy

答えて

2

Cornerの量が変更された場合は、新しい大きなアレイを作成して、古いアレイのすべての新しいアレイにコピーしてください。Cornerこれは、配列とは異なるデータ構造を必要としていることを示すはずです。 ListまたはSetのように成長できるもの。

一般に、Cornerは、他のCornerを知る必要はありません。異なるタイプは、すべてCornerを管理し、それらの間の依存関係を処理する必要があります。

は、私は、この管理タイプは次のようになりどのようにお勧めすることはできませんので、「私はすべてのCornerオブジェクトが他のすべてのコーナーのオブジェクトへのアクセスを許可する」なぜあなたはを書いていませんでした。

+0

コーナーの量は決して変化しません。コーナーは手続き的に生成されたメッシュ構造のマップの一部で、4つの三角形(それぞれ5つの頂点、4つのコーナー、1つの中心の間に描かれています)からなる多数の四角形があります。河川など様々なものをさらに生み出すために、コーナーが必要です。 お返事ありがとうございます! なぜ改行が機能しないのですか? – GodProbablyExists

+0

ありがとうございます。それはそれを説明する。 – GodProbablyExists

0

まず第一に、私は他にアクセスするための2次元配列を持つ必要性を理解していないケビンが言ったことを、あなたは

public static void createArray(int, int); 

public void createArray(int, int); 

を変更する必要がありませんにとっコーナーオブジェクト。

また、配列は動的割り当てに適した構造体型ではありません。リストはより良い選択肢であり、この場合はリストです。一般的に

private static List<Corner>; 
0

静的が良いオブジェクト指向設計における異常ある -

あなたにリストを作成する必要があります - だから、としてそれを実装する必要があります。あなたはそれを行うには非常に良い理由がある場合にのみそれを使用します。

あなたの例は、このようには見えません。あなたは一緒に属していないものを混ぜているのが分かります。 「コーナー」は、単に「コーナー」です。他の「コーナー」についてはわかりません。

実際に作成しているモデルでは、複数のコーナーを扱う「囲む」ものがいくつかあります。囲むものには、囲むエンティティに属するすべてのコーナーオブジェクトを追跡するために使用されるフィールドがあるかもしれません。List<Corner>

スタティックは、しばしば、このような問題を解決するための簡単で便利な方法のように見えます。しかし、現実には、このようなものを実装するだけで多くの問題を作り出しています。それは当初は機能しますが、プログラムを強化しようとするとすぐに中断されます。

0

いいですか?

理由1: - - :シングル責任原則

は、2つの理由があります。すべてのオブジェクトは、その懸念について責任を負うべきです。ので、コーナーオブジェクトの懸念ではなく、他のコーナーオブジェクトのリストを維持する。 単体テスト - :コーナーのオブジェクトを維持することは(もテストしやすいだろう)コーナーキャッシュ

理由2を維持し、いくつかのutilのクラスメソッドまたはシングルトンオブジェクトの下に行くことができます。スタティックメソッドの単体テストを書いたければ、jmockit、

関連する問題