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 kowalsky . Évalué à 3.
Quand je mets dans le constructeur, qui ne contient que des getter/setter, j'ai des valeurs aussi…
Et bien quand l'objet est créé, il est déjà rempli de valeur…public class Equip () {
Des getter/setter
public Equip () { System.out.println(this.getInterfaces().size() }
}
# parce que tu lui demandes de le faire ?
Posté par NeoX . É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
[^] # Re: parce que tu lui demandes de le faire ?
Posté par kowalsky . É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 fearan . Évalué à 8.
je subodore des static en trop.
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: il manque les sources de Equip et EquipTool
Posté par kowalsky . Évalué à 2.
Oh il me semble bien que tu as raison.
J'ai un objet avec des static à la place de private .
[^] # Re: il manque les sources de Equip et EquipTool
Posté par kowalsky . Évalué à 3.
Tu subodorais correctement.
Des fichiers avaient été auto-généré par un IDE je ne sais ou et je ne sais quand. Toutes les méthodes de ces objets étaient static.
Bien vu, tu m'as sortie d'une bien fâcheuse situation !
# En tant que que vieux codeur C
Posté par Anthony Jaguenaud . É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 Dr BG . É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 Eh_Dis_Mwan . É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.