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

Langage Java Discussion :

Objets non modifiés.


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 125
    Points : 78
    Points
    78
    Par défaut Objets non modifiés.
    Bonjour
    Je rencontre un problème de modification dans une liste d'objets. Le smodifications sont effectives à l'intérieur de la méthode mais ne sont pas répecutées quand je sors de la méthode.

    Pour vous expliquer :
    J'ai un objet Sequence qui contient une liste d'objets Modele.
    Sequence a une methode veriferModeles() qui aprcourt la liste de smdoeles et pour chaque modele qui n'est pas complet, le complete (par l'appel d'une méthode qui agira sur ce modele.)
    Dans cette méthode verifierModeles() les modifications sont bien prise en compte et mon Modèle est complet.

    Bizarrement une fois ressorti de la méthode, si je reparcours la liste des modles de la séquence il sne sont plus complets.
    Qui des passages de paramètres par référence ou par valeur où j'ai l'impression que de nombreux internautes (comme moi) se perdent...
    Merci de votre aide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Sequence implements Serializable{
     private List<Modele> listeModeles; 
     
    public void verifierModeles(Utilisateur utilisateur) {
    for (Modele monModele : modeles){
       if (monModele .incomplet()){
           monModele = resoudre(monModele , utilisateur);
           monModele.sauvegarde();  
           //A ce niveau le modele est complet!!
       } else {
          logger.info("Le modèle "+modele.getTitre()+" est complet!"); 
       } 
    }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 125
    Points : 78
    Points
    78
    Par défaut
    Bon après quelques recherches je me rend compte que dans resoudre(monModele , utilisateur);
    Je créais un nouveau Modele que j'affectais à la référence passée monModele.
    Il semblrerait que comme cette référece était modifiée ell ene modifiat pas l'objet réel.
    J'ai donc écrit une procédure Modele.copierModele(unAutreModele) pour ne plus faire des trucs du genre monModele=unAutreModele
    Est-ce que quelqu'un d'expérimenté peut e confirmer avec des mots plus savants ce que j'essaye de comprendre!?
    Merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Citation Envoyé par MickSou Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Sequence implements Serializable{
     private List<Modele> listeModeles; 
     
    public void verifierModeles(Utilisateur utilisateur) {
    for (Modele monModele : modeles){
       if (monModele .incomplet()){
           monModele = resoudre(monModele , utilisateur);
           monModele.sauvegarde();  
           //A ce niveau le modele est complet!!
       } else {
          logger.info("Le modèle "+modele.getTitre()+" est complet!"); 
       } 
    }
    Dans ta boucle for, d'où sort modeles ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Visiblement tu ne maîtrises pas très bien la programmation objet, je t'invite donc à prendre quelques cours supplémentaires.

    Pour te répondre, dans la méthode verifierModeles(Utilisateur), initialement tu crées une variable monModele qui référence un élément de la collection modeles (qui n'est pas indiqué ici). Puis sous certaines conditions, tu fais pointer la variable monModele vers une référence non déterminée ici.

    Ce qu'il faut comprendre en Java : les variables (sauf les types primitifs) ne sont que des références vers des objets. Si je modifie la référence d'une variable, je ne fais que faire pointer cette variable vers un autre objet.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 125
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par MickSou Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Sequence implements Serializable{
     private List<Modele> listeModeles; 
     
    public void verifierModeles(Utilisateur utilisateur) {
    for (Modele monModele : listeModeles){
       if (monModele .incomplet()){
           monModele = resoudre(monModele , utilisateur);
           monModele.sauvegarde();  
           //A ce niveau le modele est complet!!
       } else {
          logger.info("Le modèle "+modele.getTitre()+" est complet!"); 
       } 
    }
    Voilà c'est corrigé...

    Nemek... Merci c'est ce que je viens de comprendre. La difficulté je crois venait du fait que je récupérais d'une communication inter-socket un objet Modele dans resoudre(). J'essayais de l'affecter à mon modele de départ mais impossible... Je dois modifier l'état de mon modèle de départ our qu'il ait finalement le même état que mon modèle récupéré sur le socket.
    Merci pour votre aide

Discussions similaires

  1. Réponses: 17
    Dernier message: 30/09/2010, 14h26
  2. Objet en lecture/ non modifiable
    Par javaDev dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 19/10/2009, 15h29
  3. Rendre un champ non modifiable sur un onclick
    Par damjal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2005, 01h16
  4. Réponses: 5
    Dernier message: 30/09/2005, 16h42
  5. Attributs d'un record en property non modifiables
    Par WebPac dans le forum Langage
    Réponses: 15
    Dernier message: 11/04/2005, 12h59

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