2016-03-29 9 views
0

クラスのインスタンスをいくつか作成して配列に追加する必要があります(現在ArrayListを使用していますが、必要に応じて変更できます)。私は約20の他のクラスのためにそれを行う必要があります、それぞれ異なるインスタンス量の異なる。各項目のforループを書くのではなく、これを行うより効率的な方法は何でしょうか?不明な数のオブジェクトインスタンスを作成する効率的な方法

ArrayList<Tile> bag = new ArrayList<Tile>(); 
    num_tile_a = 10; 
    num_tile_b = 6; 
    num_tile_c = 4; 
    num_tile_d = 8; 

    for (int i = 0; i < num_foo; i++){ 
     bag.add(new Tile_a()); 
    .... 

EDIT:この例では、Tile_a、Tile_b、Tile_c、およびTile_dは、すべてのタイルクラスの異なる子クラスです。

+0

fooのインスタンスが10個、barのインスタンスが6個など必要ですか? – Gendarme

+0

それは正しいです。 –

+0

別々のインスタンスが必要な場合は、 'Arrays.fill'は1つのインスタンスしか作成しないので、ループすることができます(Java 8ではループスルーできます)。 – Mena

答えて

3

私は返信を投稿するつもりです... 24の異なるループを書くことに反対する方法は、オブジェクトをオブジェクトの数に作成できるファクトリからマップを持つことです。

interface <T> IFactory { 
T create(); 
} 

よう

何かそしてちょうどあなたが持っている各クラスの工場を持っています。これらの各クラスは、コンストラクタと、あなたが

Map<Class,Integer> classToNumOfInstances; 

のマップを持っており、ちょうど方法のnewInstance()を呼び出すことができます任意のジェネリックを使用していないデフォルトを持っている場合は別のオプションは以下のようになり

Map<IFactory,Integer> factoryToNumOfInstances; 

clazz.newInstance(); 
+0

各クラスには引数を持たないデフォルトのコンストラクタがあるので、これはうまくいくように見えます。地図は何をしていますか? –

+0

ええと、あなたはどこでループを取り除きますか?インスタンスを必要とする回数だけ、 'factory.create()'または 'clazz.newinstance()'を何度も呼び出す必要があります。両方のパターンを使用すると、作成ロジックを新しい(サブ)クラスに拡張しやすくなり、関連するすべての潜在(サブ)クラスの作成をアンロールすることを避けることができます。おそらくあなたはこれを念頭に置いていましたが、無実の読者がそれを見逃すかもしれません。 – rpy

+0

@NickJarvisマップは、作成する必要があるインスタンスの数を伝えるだけのものです。ファクトリメソッドを何度呼び出すか。 – imps

関連する問題