2016-12-25 4 views
0

私のようなハックコード記述することなく、異なるクラスの異なるインスタンスを作成する方法を探しています:どのように私は簡単な方法で別のクラスの複数のインスタンスを作成しますか?

PersonInstance pinstance = new PersonInstance(); 
FamilyInstance finstance = new FamilyInstance(); 

をしかし、これを行うと、それは(70のような)のインスタンスすぎ番号を行くことができます。 同じ種類のコードを持つ70行を書き込まずに良いコードを作成する方法に関するアイデアはありますか? あなたが理解していなかった場合:

古典的な方法で70回

PersonInstance instance = new PersonInstance(); 

(異なるクラス、異なるインスタンス識別子)と70個の異なるインスタンス(異なるクラスは、すべて異なる)を初期化すると、少しハックです。 この方法を使用せずに初期化する方法を知りたいと思います。 明らかに、すべてのクラスには、同じクラスにある共通のものがあります。 可能かどうか知りたいですか?

+1

しかし、それらは同じではありません。 –

+0

ファクトリデザインパターンを使用して、目的のオブジェクトを作成することができます。オブジェクトの作成は、forループをラップすることができます。 – gihan

+0

あなたは私の言いたいことを知っています。 –

答えて

0

私がこれを正しく理解していれば、すべての異なるクラスのスーパークラスを作成する必要があります。 例:

class B extends PersonInstance 
{ 
// 
} 
class C extends PersonInstance 
{ 
// 
} 

その後、あなたは例えば、配列またはリストを作成する必要があります。あなたが使用することができ

List<PersonInstance> list = new ArrayList<>(); 
for(int i = 0; i<=69; i++) 
{ 
    list.add(new B()); 
    // or list.add(new C()); 
} 
0

依存性注入/制御の反転(IoC)。たとえば、Springには@Autowireのようなアノテーションが付いています。Dependency Injection Containerはすべての依存関係を解析し、newを呼び出すことなく適切なコンストラクタに渡します。コードは、私はPC上で午前とき、後にリンクを追加しますユニットTest..Iにクリーンかつ容易になり:)

+1

解決しても面白いですね:) –

0

の代わりに、このやって:

PersonInstance instance1 = new PersonInstance(); 
PersonInstance instance2 = new PersonInstance(); 
... 
... 
... 
PersonInstance instance99 = new PersonInstance(); 

をあなたはすべての70個のインスタンスを作成するためにarrayを使用することができますPersonInstanceの、のような:NはあなたがPersonInstanceのインスタンスを格納することができ、アレイ内のスロットの数がある

PersonInstance[] personInstances = new PersonInstance[N]; 
for(int i = 0; i < personInstances.length; i++){ 
    personInstances[i] = new personInstances(); 
} 

。あなたのケースでは、Nは70のようになります。

PersonInstance[] personInstances = new PersonInstance[70]; 
for(int i = 0; i < personInstances.length; i++){ 
    personInstances[i] = new personInstances(); 
} 

あなたはPersonInstance番号kにアクセスしたい場合はその後、あなたがでそうするでしょう:インデックス0、Eから配列の開始以来、

PersonInstace thisPerson = personInstances[k-1]; 

。あなたがPersonInstance 56にアクセスしたい場合は、あなたがでそうなりグラム:

PersonInstace thisPerson = personInstances[55]; 

はそれがお役に立てば幸いです。例えば、BrotherInstanceはPersonInstanceを拡張する場合は、あなたのようなあなたのPersonInstanceアレイにBrotherInstanceを追加することができ

PersonInstance[] personInstances = new PersonInstance[70]; 
    //add 50 PersonInstances 
    for(int i = 0; i < personInstances.length-20; i++){ 
     personInstances[i] = new PersonInstances(); 
    } 
    //add 20 BrotherInstances 
    for(int i = 50; i < personInstances.length; i++){ 
     personInstances[i] = new BrotherInstances(); 
    } 

などにそれらを一つずつアクセス:

ANSWERを更新し

PersonInstance currentPerson = personInstances[24] //A PersonInstance PersonInstance currentBrother = personInstances[61] //A Brother instance 

または

BrotherInstance currentBrother = personInstances[61] //A Brother instance 

またはループそれらすべてのように:

for(PersonInstance person: personInstances){ 
     //Do something with every person here, maybe print out something. 
    } 

for-loopはすべてPersonInstancesをループすることが、彼らはどちらかPersonIntanceあるかPersonInstanceを拡張するので、彼らはPersonInstanceまたはBrotherInstanceです天気を。

+0

まさに私が欲しかったこと、ありがとう!! –

+0

@SapusBoh喜んで私は助けることができました! – Carlton

+0

しかし、1家族インスタンス、1人インスタンス、1人兄弟インスタンスなど、別のインスタンスを作成する必要がある場合は、 –

関連する問題