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

avec Java Discussion :

passage d'objet en argument


Sujet :

avec Java

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut passage d'objet en argument
    Bonjour,

    Je souhaite faire une petite suite d'objets qui me permettrait de réaliser la chose suivante :

    depuis des méthodes de la Classe Service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class Service extends Template {
     
    public int updateUser(User userToUpdate) {
    		return update("User.update", userToUpdate);	
    	}
    public int updateVoiture(Voiture voitureToUpdate) {
    		return update("Voiture.update", voitureToUpdate);	
    	}
    }
     
    //aller chercher dans class Template : 
     
    class Template extends mesXML {
     
    public int update(String function, Object objectToUpdate) {
       try
    		{
    			if(function.compareTo("User.update")==0) {return updateUser((User) objectToUpdate);}
    			else if(function.compareTo("Voiture.update")==0) {return updateVoiture((Voiture) objectToUpdate);}
    			else{System.out.println("no such method");}
     
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		return 1;
            }
    }
     
    //et donc enfin :
     
    class mesXML {
     
          public int updateUser(User userToUpdate) {}
     
          public int updateVoiture(Voiture voitureToUpdate) {}
     
    }
    Si je fais ça, j'obtiens :
    Exception in thread "main" java.lang.StackOverflowError et l'erreur se situe dans la classe Template lorsque je force le typage de l'objet (User) ou (Voiture) pour appeler les fonctions respectives.
    Ce qui est bizarre, c'est que j'ai déjà fait code proche de ça et tout c'est bien passé.
    La seule solution que j'ai trouvé et qui est stable, c'est de ne pas forcer les types pour les appels aux fonctions, puis dans chaque fonction (updateUser ou UpdateVoiture) reconstruire un objet du type souhaité (User ou Voiture) depuis le type Object.

    Quelqu'un comprend et peu m'expliquer ? C'est peu être pas trop clair.
    Merci

    Pour la logique du truc : ma classe Service c'est mon service. elle appelle la classe Template qui elle tape dans ma source de données (ici XML). L'intérêt que je vois, c'est que je pourrais facilement changer ma couche de données et j'ai uniformisé l'appel à cette couche pour chaque entité du programme avec des fonctions de Template. Peut être que c'est pas si logique que ça après tout.

    remarques Bienvenue

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 54
    Par défaut
    C'est normal que tu es cette erreur, en fait ton programme boucle. Tu as Service qui hérite de Template qui hérite de MesXML.

    Donc quand tu fais un updateUser dans service, il appelle la méthode update, qui rappelle la méthode updateUser de service car il est redéfini.

    Un conseil, sépare la couche service de ta couche d'accès aux données. Regarde du côté du pattern DAO. autre chose, le update avec une chaine qui décrit l'ordre c'est pas génial, tu pourrais plutôt créer plusieurs méthodes update en changeant les paramètre, ici User et Voiture.

  3. #3
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    J'allais dire la même chose pour la boucle.

    Pour info, plutôt que de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(function.compareTo("User.update")==0)
    ce sera plus court de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(function.equals("User.update"))
    De plus il faudrait déclarer "User.update" en tant qu'attribut static final pour éviter de le redéfinir plusieurs fois.

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 24
    Par défaut
    Merci,

    réponse rapide et très clair. Je vois clairement le problème. Et pour le DAO, j'ai trouvé ce qu'il me fallait :
    http://www.supinfo-projects.com/fr/2005/modele_dao/3/.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage d'objet en argument d'une procedure
    Par richton95 dans le forum Général VBA
    Réponses: 2
    Dernier message: 15/07/2010, 17h17
  2. [POO] Calendrier et passage d' objet en parametre
    Par julienr dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/11/2007, 22h18
  3. passage d'objets en tant qu'arguments
    Par lexsteens dans le forum Langage
    Réponses: 8
    Dernier message: 19/10/2006, 18h01
  4. Réponses: 4
    Dernier message: 02/01/2005, 23h24
  5. [ JSP ][ Débutant ] Passage d'objet par un forward
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/04/2004, 10h33

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