Forum Programmation.java Objet qui s’instancie avec des valeurs de l'objet précédent ?

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
7
jan.
2020

Je suis sur un truc qui me rend dingue.

J'ai une simple boucle :

public class compileFile {

    public static void main (String noArg[]) throws IOException {
        File directory=new File("/home/kowy/ipfinder") ; 
        for (String configFile:directory.list()) {
            String configFileFull=directory.getAbsolutePath()+"/"+configFile ; 
            Equip equip=null ; 
            try {
                EquipTool equiptool=new EquipTool() ;               
                equip=equiptool.parse(configFileFull) ; 
            } catch (Exception E) {
                System.out.println(E.toString) ; 
            }
            **System.out.println(equip.getInterface().size()) ;** 
        }
    }
}

Ce qui me rend dingue c'est que l'objet equip retient les valeurs de l'objet précédent. Donc à chaque passage de la boucle, il y a les interfaces de l'objet précédent.

Sachant que tous les objets sont créés dans la boucle, je n'arrive pas à comprendre comment cela est possible…

  • # ??

    Posté par  . Évalué à 3.

    Quand je mets dans le constructeur, qui ne contient que des getter/setter, j'ai des valeurs aussi…

    public class Equip () {
    Des getter/setter
    public Equip () { System.out.println(this.getInterfaces().size() }
    }
    Et bien quand l'objet est créé, il est déjà rempli de valeur…

  • # parce que tu lui demandes de le faire ?

    Posté par  . Évalué à 3.

    je ne suis pas expert java mais vu que tu lui demandes dans l'étape 4.2 de lire le contenu du fichier de configuration pour créer ton objet equip, je diras que c'est normal.

    et c'est peut-être ton new equiptool qui ne vide pas les infos du precedent equiptool

    File directory=new File("/home/kowy/ipfinder") ; 
    
    // STEP 1 : pour chaque fichier ou dossier se trouvant dans le dossier
            for (String configFile:directory.list()) {
    
    // STEP 2 : definit le chemin de configFile
                String configFileFull=directory.getAbsolutePath()+"/"+configFile ; 
    
    // STEP 3 : creer un objet equip qui doit être vide/null
                Equip equip=null ; 
    
    // STEP 4
                try {
    // STEP 4.1 : creer un objet equiptool
                    EquipTool equiptool=new EquipTool() ;               
    // STEP 4.2 : creer un objet equip, dérivé de equiptool et qui prend ses infos dans le fichier de configuration
                    equip=equiptool.parse(configFileFull) ; 
                } catch (Exception E) {
                    System.out.println(E.toString) ; 
                }
    
    // STEP 5 : envoie l'info de size d'interface de l'objet equip sur la sortie standard
                System.out.println(equip.getInterface().size()) ;
            }
        }
    • [^] # Re: parce que tu lui demandes de le faire ?

      Posté par  . Évalué à 2.

      Merci de ta réponse.

      Normalement, new veut dire créer moi une instance de cette objet, ça ne doit pas avoir d'info externe à la création de l'objet. J'ai fais moi même ces objet, il n'y a pas de constructeur autre que celui par défaut.

      J'ai fais une version ultra courte, en enlevant le fichier, en mettant une boucle "old school", je ne comprend vraiment pas.

      for (int i=0 ; i < 10 ; i++) {
      Equip equip=new Equip() ;
      equip.getInterface().add(new Interface("name"+i)) ;
      System.out.println("??? "+equip.getInterface().size()) ;
      //Ici, il ne devrait s'afficher que "??? 1", puisque qu'une interface est ajouté. Mais non, ça créé bien l'objet, mais l'objet à déjà les interface précédente.
      }

  • # il manque les sources de Equip et EquipTool

    Posté par  . Évalué à 8.

    je subodore des static en trop.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # En tant que que vieux codeur C

    Posté par  . Évalué à 3.

    Java se débrouille pour la gestion mémoire, étant donné que quand il recommence une boucle, il peut détruire l’objet equip puisqu’il sort du scope. Il peut donc réutiliser la même place mémoire pour l’instance suivante. Comme il n’y a pas de constructeur, peut-on être sûr qu’il met une valeur par défaut ?

    • [^] # Re: En tant que que vieux codeur C

      Posté par  . Évalué à 4. Dernière modification le 07 janvier 2020 à 19:39.

      Java met toujours des valeurs par défaut. Les variables sont initialisées à null pour les référence, à 0 pour les nombre, à faux pour les booléens, etc.

  • # Tu nous manques

    Posté par  . Évalué à 3.

    Pierre Tramo, tu nous manque

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.