2016-12-25 1 views
0

Je cherche un moyen de créer différentes instances de classes différentes sans avoir à écrire un code aki comme:Comment créer facilement plusieurs instances de différentes classes?

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

Mais ce faisant, il peut aller trop loin le nombre d'instances (comme 70). Des idées sur comment faire un bon code sans écrire 70 lignes qui ont le même type de codes? Si vous ne comprenez pas:

Initialiser 70 différentes instances (classes différentes, tout différent) avec la méthode classique

PersonInstance instance = new PersonInstance(); 

pour 70 fois (différent de classe, différents identificateur d'instance) est un peu hacky. Je voudrais savoir comment les initialiser sans utiliser ça. Il est clair que toutes les classes ont quelque chose de commun qu'elles s'étendent toutes sur la même classe. Je veux savoir si c'est possible ou non?

+1

Mais ce ne sont pas les mêmes. –

+0

vous pouvez utiliser le motif de conception d'usine pour créer l'objet que vous voulez.la création d'objet peut être enrouler autour de la boucle. – gihan

+0

Vous savez ce que je veux dire. –

Répondre

0

Si je comprends bien, vous devez créer une super-classe pour toutes vos classes différentes. Exemple:

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

Ensuite, vous devez créer un tableau ou une liste, par exemple:

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

Vous pouvez utiliser Injection de dépendance/inversion de contrôle (IoC). Par exemple, Spring fournit des annotations comme @Autowire pour masquer votre constructeur. Le conteneur d'injection de dépendances effectue toutes les initialisations en analysant toutes les dépendances et en les passant aux constructeurs appropriés sans avoir besoin d'appeler new. Le code devient plus propre et plus facile à l'unité Test..I ajoutera des liens plus tard, quand je suis sur un PC :)

+1

Même si résolu, il serait intéressant de le voir :) –

0

au lieu de le faire:

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

Vous pouvez utiliser un array pour créer tous les 70 cas de PersonInstance, comme:

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

N est le nombre de créneaux horaires dans le tableau où vous pouvez stocker des instances de PersonInstance. Dans votre cas, N serait 70:

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

Alors si vous souhaitez accéder à nombre de PersonInstance k, vous le faire:

PersonInstace thisPerson = personInstances[k-1]; 

depuis un tableau commence à partir de l'index 0, e.g si vous voulez accéder PersonInstance 56, vous le ferait par:

PersonInstace thisPerson = personInstances[55]; 

Hope it helps.

RÉPONSE À JOUR:

Si, par exemple, BrotherInstance étend PersonInstance, vous pouvez ajouter un BrotherInstance à votre tableau de PersonInstance comme:

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(); 
    } 

et d'y accéder un par un comme:

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

ou

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

ou boucle tous comme:

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

Ce for-loop fera une boucle par tous les PersonInstances, wether ils sont PersonInstance ou BrotherInstance car ils sont soit un PersonIntance ou de prolonger PersonInstance.

+0

Exactement ce que je voulais, merci !! –

+0

@SapusBoh Content de pouvoir aider! – Carlton

+0

Mais si vous devez créer une instance différente comme 1 instance de famille, 1 instance de personne, 1 instance frère, etc. –