IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Créer des instances en boucle


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Créer des instances en boucle
    Désolé de poser une question aussi basique ... mais il semble que la recherche sur ce critère (libellé de mainte manières) ne donne rien.

    Pour tester une application, de voudrais nommer les instance d'une classe automatiquement dans une boucle de 1 à X ... mais je ne trouve pas le truc.

    un code du style ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 1 ; i <=5 ; i++)
    {
      MaClasse ("monInstance"+i) = new MaClasse(...);
    }
    Quelqu'un connait une solution ?
    Merci d'avance...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Salut,

    J'avais posté un truc dans le même esprit une fois :

    http://www.developpez.net/forums/sho...d.php?t=512143

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Donc ouais,
    en gros je sais pas si ça t'irait, mais moi j'avais du faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HashMap<String, MaClasse> mymap = new HashMap<String, MaClasse>();
     
    for (int i=0; i<5; i++)
         mymap.put("instance"+i, new MyClasse());
    et donc apres tu peux recuperer tes instances en faisant
    mymap.get("instance"+i);
    avec i=numero de l'instance

  4. #4
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    ca me parait quand-même plus simple de faire un tableau d'instances
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    oui, mais la hashmap permet de pouvoir donner le nom que tu veux (pas un
    simple numéro) à tes instances. Si ça t'es pas nécessaire, effectivement....

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut HashMap !!
    OK pour l'idée ... mais pourquoi une Map ?
    En dehors de l'absence de doublons, quel avantage ?
    Quelle est la paire clé-valeur dans ce cas ?

    C'est pas un peu lourd de devoir utiliser un iterator après ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Tux++ Voir le message
    ca me parait quand-même plus simple de faire un tableau d'instances
    Voici un bout de code d'essai avec un String[] ... sans succès

    public static void main(String[] args) {

    EtagereProduitsBruts etagereBruts = new EtagereProduitsBruts(1,6);


    String[] nomsP = { "Alan","Boby","Carl","Dany","Eric"};

    for(int i=0 ; i < nomsP.length ; i++)
    {

    Producteur ("producteur"+(i+1)) = new Producteur(monP[i], (i+1), etagereBruts);
    //producteur1.setName("thread producteur1");
    //producteur1.isDaemeon(true);
    //producteur1.start()
    }

    }

  8. #8
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Ta notation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Producteur ("producteur"+(i+1)) = new ...
    est impropre. C'est une syntaxe qui n'appartient pas a Java. Il n'y a aucune chance qu'il te comprenne.

    Puisque tu veux seulement nommer tes objets pour débugger :
    1. Si tes composants sont des Component tu peux utiliser la méthode setName(String) pour les nommer et getName() pour récupérer ce nom.
    2. Si tes objets ne sont pas des Component, tu peut créer un attribut pour Producteur avec ses accesseurs. En quelque sorte recréer la propriété des Component évoqué en 1.
    3. Sinon la Map reste la dernière possbilité : la paire clé/valeur sera le nom et l'objet en lui même. L'iteration est lourd si tu as des centaines de milliers d'itération a faire, si tu juste quelques objets c'est négligeable.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci à tous de vos réponses...

    Finalement, j'ai recopié 8x le paquet de lignes de code (création de thread, nommer, setDaemon(true) et starter ... ensuite arrêter !) et mon machin fonctionne.

    Vos solutions sont séduisantes, mais finalement elle ne me feront pas gagner de temps (suis pas sûr de bien maitriser les objets dans des map ... ou de devoir finalement taper plus de code).

    Dommage que ce ne soit pas plus simple...

    Merci encore.

  10. #10
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    SI tu ne veux pas utiliser de map, bêtement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Object[] tab = new Object[5];
     
    for (int i=0; i<5; i++)
         tab[i] = new MyClasse();
    Certified Oracle Advanced PL/SQL Professional
    Certified Oracle APEX Expert
    Certified Oracle SQL Expert

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Pas mal !

    Et tu récupère tes noms d'instance comment ?
    Je suppose que pour chaque opération ou méthode appelée sur ces instances, tu boucle comme suit ?

    for (MyClasse obj : tab) obj.laMethodeAppelee() ;

    Merci de confirmer ... car si c'est bien cela, cela parait très simple

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Juste une question Sup : pourquoi un Object[] et pas un MyClass[] ?

    dans le premier cas, le casting impose une ops en plus non ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Création et utilisation dynamique d'instances ... résolu
    Merci à Tux++

    voici un exemple basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public class MaClasse {
     
        private int id;
        private String name;
     
        public MaClasse(int id, String name)
        {
            this.id = id;
            this.name = name;        
        }
     
        public void maMethode()
        {
            System.out.println("Ma methode renvoie id = "+id+ " et nom = " + name);
        }
    }
    Le launcher ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class CreationDynamique {
     
        public static void main(String[] args) {
     
            String[] noms = {"Alan","Boby","Carl","Dany"};
     
            MaClasse[] instances = new MaClasse[4];
     
            for(int i=0; (i < noms.length) && (i < instances.length)  ; i++)
            {
                instances[i] = new MaClasse((i+1),noms[i]);
            }
            for(MaClasse instance : instances) instance.maMethode();
        }
    }
    et le résultat sur la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Ma methode renvoie id = 1 et nom = Alan
    Ma methode renvoie id = 2 et nom = Boby
    Ma methode renvoie id = 3 et nom = Carl
    Ma methode renvoie id = 4 et nom = Dany
    CQFD.... ET MERCI BEAUCOUP !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer des répertoires en boucle à partir d'un JTextArea
    Par electr0n dans le forum Composants
    Réponses: 3
    Dernier message: 27/04/2012, 23h26
  2. Réponses: 12
    Dernier message: 16/11/2011, 17h41
  3. [GMF] Créer des instances d'éléments par programmation
    Par hashas dans le forum Eclipse Modeling
    Réponses: 1
    Dernier message: 03/08/2010, 23h20
  4. Créer des instances de classes EMF dans Eclipse avec une jolie IHM
    Par obernard dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 24/02/2009, 19h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo