Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
501 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java]Problème d'effet de bord

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java]Problème d'effet de bord

n°288984
redant
Posté le 18-01-2003 à 15:38:11  profilanswer
 


ça doit être très con mais je bloque, voici le bout de code qui me pose problème:
 

Code :
  1. MonObjet1 tabObjet1[];
  2. MonObjet2 obj2;
  3. //appel des constructeurs pour tabObjet1[] et obj2
  4. obj2.methode(tabObjet1); //cette méthode modifie le tabObjet1
  5. //après l'appel de la méthode sur obj2 tabObjet1[] a changé


 
Le problème est que je ne veux pas que tabObjet1 soit modifié par la méthode appelée sur obj2.
 
En C il suffirait de faire un passage par valeur, mais en java vu que tout objet est une référence je vois pas comment faire.
 
merci d'avance,
 

mood
Publicité
Posté le 18-01-2003 à 15:38:11  profilanswer
 

n°289008
darklord
You're welcome
Posté le 18-01-2003 à 16:07:49  profilanswer
 

tu envoies à la méthode un clone de l'objet où tu fais une copie locale de l'objet que tu passes en paramètre


---------------
Just because you feel good does not make you right
n°289023
redant
Posté le 18-01-2003 à 16:44:09  profilanswer
 


j'ai essayé ta méthode de cette façon:
 

Code :
  1. obj2.methode((MonObjet1[])tabObjet1.clone());


 
mais cela fait exactement la même chose, tabObjet1[] est toujours modifié après l'appel.
 
J'ai cherché de l'aide sur clone() j'ai trouvé ça dans la doc:
 
Note that all arrays are considered to implement the interface Cloneable. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.
 
d'après ce que je comprends clone() ne permet pas de cloner les objets attributs de MonObjet1 s'ils sont complexes (c'est mon cas).  
 
Dans ce cas comment faire ?

n°289025
lorill
Posté le 18-01-2003 à 16:49:39  profilanswer
 

faut implémenter la méthode clone de MonObjet1 pour cloner correctement les attributs  [:sinclaire]

n°289054
redant
Posté le 18-01-2003 à 17:52:12  profilanswer
 

le problème c'est je fais le clone sur le tableau d'objets tabObjet1[] et non sur une instance de MonObjet1.
 
la méthode clone() que j'implémente dans la classe MonObjet1 n'est donc pas appelée.

n°289058
lorill
Posté le 18-01-2003 à 17:54:29  profilanswer
 

Redant a écrit :

le problème c'est je fais le clone sur le tableau d'objets tabObjet1[] et non sur une instance de MonObjet1.
 
la méthode clone() que j'implémente dans la classe MonObjet1 n'est donc pas appelée.


normalement si... je suppose que tabObjet.clone() appelle clone sur chacun de ses élements. Mais je suis pas sur de moi sur ce coup la. Essaye deja en mettant un simple println dedans, tu seras vite fixé !

n°289067
kadreg
profil: Utilisateur
Posté le 18-01-2003 à 18:01:34  profilanswer
 

lorill a écrit :


Je suppose que tabObjet.clone() appelle clone sur chacun de ses élements.  


 
Tu suppose mal, c'est justement le contraire qui se passe comme le montre l'extrait de doc cité par Redant


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°289075
HappyHarry
Posté le 18-01-2003 à 18:12:40  profilanswer
 

kadreg a écrit :


 
Tu suppose mal, c'est justement le contraire qui se passe comme le montre l'extrait de doc cité par Redant


 
+1
 
-> ecrire une methode tabClone qui crée un nouveau tableau contenant les clones des elements de tabObjet1

n°289077
lorill
Posté le 18-01-2003 à 18:15:23  profilanswer
 

kadreg a écrit :


Tu suppose mal, c'est justement le contraire qui se passe comme le montre l'extrait de doc cité par Redant


oups :o
 
c'est quoi l'intéret d'avoir choisi cette solution ?

n°289079
kadreg
profil: Utilisateur
Posté le 18-01-2003 à 18:19:44  profilanswer
 

lorill a écrit :


c'est quoi l'intéret d'avoir choisi cette solution ?


 
Les array[] en java m'ont toujours semblé un peu bizarre. J'ai l'impression qu'ils font plus ou moins partie des types primitif non objet (int passe par valeur par exemple), sauf qu'ils ont quand même des méthodes.
 
Un concept assez bizarre, du même ordre d'ailleurs que les [] en C++.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 18-01-2003 à 18:19:44  profilanswer
 

n°289842
BifaceMcLe​OD
The HighGlandeur
Posté le 20-01-2003 à 11:48:34  profilanswer
 

Ce sont effectivement des objets bâtards. Mais leur principal avantage reste la rapidité d'accés comparé aux solutions équivalentes (comparez le temps d'exécution pour parcourir un tableau de 500 éléments par indice, ou une liste de 500 éléments par indice ou pire par itérateur... C'est impressionant)

n°290434
nraynaud
lol
Posté le 21-01-2003 à 06:32:59  profilanswer
 

kadreg a écrit :


 
Les array[] en java m'ont toujours semblé un peu bizarre. J'ai l'impression qu'ils font plus ou moins partie des types primitif non objet (int passe par valeur par exemple), sauf qu'ils ont quand même des méthodes.
 
Un concept assez bizarre, du même ordre d'ailleurs que les [] en C++.


et ils permettent un peut de généricité typée "safe" en bidouillant avec (je suppose) le package lang.reflect :
http://java.sun.com/j2se/1.4.1/doc [...] ang.Object[])
 
vive la magouille ! Mais bon, je vais pas me plaindre, pour une fois que ça ne se finit pas à coup de "downcast" dans la hiérarchie.


Message édité par nraynaud le 21-01-2003 à 06:35:53

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java]Problème d'effet de bord

 

Sujets relatifs
Probleme Visual Stduio[JS / HTML] Probleme d'apparence des lien
regénérer la doc java à partir des sourcesProbleme de passage de VC++ 6.0 à BC++ 6.0
[java] le meilleur obfuscateur de code ?Réseaux de petri en java
Interface Java & C++cherche un "analyseur de classes" pour JAVA
[Java] Génération d'un document XSL en Java RESOLUProblème d'administrateur sous phpnuke
Plus de sujets relatifs à : [Java]Problème d'effet de bord


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR