Création d'objet de classe avec nom concaténé

Signaler
-
Messages postés
16107
Date d'inscription
samedi 31 mai 2008
Statut
Non membre
Dernière intervention
23 novembre 2020
-
Bonjour

J'ai un problème de manipulation de variable qui pourrait sembler banal, mais dont je n'arrive pas à trouver de solution.
Imaginons une classe : class Ma_Classe { ... }
Et imaginons que je veuille créer 10 objets de cette classe, je vais devoir écrire 10 instructions, depuis "Ma_Classe Mon_Objet_1 = new Ma_Classe() ;" jusqu'à "Ma_Classe Mon_Objet_10 = new Ma_Classe() ;" .

Je me suis dit qu'il serait plus malin de faire une boucle de i = 1 à i= 10.
de concatener "Mon_Objet_" et i , dans une variable.
et de n'utiliser qu'une seul ligne "Ma_Classe ici_on_utilise_le_mot_concaténé = new Ma_Classe() ;"
donc la valeur concaténé deviendrait un nom de variable.

Celà semble tout bête mais je n'y arrive pas après de longues recherches, j'ai même essayé avec des contenus de tableau.
Quelqu'un saurait il me renseigner ?

2 réponses

Messages postés
30277
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 novembre 2020
3 009
Bonjour,

Je ne fais plus de Java depuis longtemps... mais la "logique" reste à peu près la même dans tous les langages...

Quelle est l'utilité d'instancier x objets de façon "dynamique" ( via une boucle) dans des variables différentes (Mon_Objet_1, Mon_Objet_2 .. ) sachant que, dans ton code, tu devras de toutes façons utiliser le "nom" de ces variables pour les manipuler...

A la limite, il vaudrait mieux stocker tes différentes instances dans un array
exemple : https://www.softwaretestinghelp.com/array-of-objects-in-java/#:~:text=One%20way%20to%20initialize%20the,assign%20data%20to%20the%20objects.

Bonjour et merci pour la réponse.

J'ai regardé le principe de création d'instances par Array, je ne connaissais pas, cela pourra me servir dans d'autres occasions, mais pas dans le cas présent, j'explique pourquoi :

Dans mon projet, j'ai obtenu de standardiser les noms des instances (Process14_Jalon2, Process6_Jalon10, ...).
Il n'y a que deux nombres qui varient. Il va y avoir plusieurs dizaines d'instances à créer, le programme serait plus léger si on pouvait faire des boucles en incrémentant les nombres.

Mais il y a plus important, j'ai une deuxième raison, si j'arrive à concaténer le nom des instance pour la création, je pourrai concaténer pour l'utilisation (lecture / écriture du contenu) et pour cela je n'ai pas de plan B car ce sont des données provenant d'un fichier EXCEL qui va m'indiquer sur quelle instance travailler.
Une cellule EXCEL va me demander d'utiliser par exemple l'instance "Process14_Jalon2", pour cela je vais forcément passer par une variable, qui doit devenir un nom d'instance.

J'espère avoir bien expliqué mon problème.
Messages postés
16107
Date d'inscription
samedi 31 mai 2008
Statut
Non membre
Dernière intervention
23 novembre 2020
2 733
Bonjour,

Pour répondre d'emblée à la question, il n'est pas possible de concaténer un nom d'attribut pour y accéder, une telle concaténation serait le résultat de l'exécution alors que le nom d'attribut doit être résolu à la compilation.

Tu devrais regarder le fonctionnement des Map qui permettent de stocker des couples clé/valeur dont les clés pourraient correspondre ici à ta concaténation. Exemple :
import java.util.*;

public class Test {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<>();
        map.put("Process14_Jalon2", "toto");
        map.put("Process6_Jalon10", "tata");

        String value1 = map.get("Process14_Jalon2");

        int process = 6, jalon = 10;
        String value2 = map.get("Process" + process + "_Jalon" + jalon));

        System.out.println(value1); // toto
        System.out.println(value2); // tata
    }
}