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 :

méthode static, modification de donnees


Sujet :

Langage Java

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut méthode static, modification de donnees
    Bonjour tout le monde,
    Je précise, j'ai cherché sur les furums et la FAQ.

    Donc voilà mon problème, j'ai créé une méthode statique qui doit retourner un objet Utilisateur.
    Je lui passe également en paramètre des HashSet et TreeMap. Dans cette méthode je fais des ajouts sur ces deux listes...

    - mon objet Utilisateur est bien retourné (c'est déja ça)
    - mes listes ne sont pas modifiées dans l'objet appelant...

    Est-ce que c'est normal ?
    Comment faire ?
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 239
    Par défaut
    Salut,

    si je me souviens bien static sert à définir les méthodes de classes (et non méthodes d'instance).

    Par exemple, dans la classe Integer, la méthode statique de classe parseValue(String) sert à convertir une chaîne de caractère en un entier (n'implique pas de manipulation avec les membres de la classe) alors que la méthode intValue() est exécutée depuis l'instance de la classe Integer.

    En conclusion, je pense que si tu définis ta méthode non statique ça devrait marcher.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Oui je pense ausi, mais j'avais pour but de construire une classe Utilisateur, comme si cétait une fabrique d'objet, sans devoir instancier explicitement un Utilisateur.
    Si je dois revenir en arrière tant pis, mais j'aurais aimé trouver une explication technique...

    Ma grande question c'est est-ce qu'on garde les références aux objets passés en paramètre dans une classe statique ?

    En tout cas merci pour ta réponse,
    bien cordialement !

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Pas cool, j'espère que ça va changer !

    (Désolé pour ce post il était destiné à un autre sujet)

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par tralloc
    Ma grande question c'est est-ce qu'on garde les références aux objets passés en paramètre dans une classe statique ?
    Je ne comprend pas très bien ta question...

    Ni ce que tu veux dire exactement par là :
    Citation Envoyé par tralloc
    - mes listes ne sont pas modifiées dans l'objet appelant...
    Un bout de code avec un exemple d'utilisation de ta méthode et les résultats attendus/obtenus serais peut-être utile...

    a++

  6. #6
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    +1 montre-nous ton code. Personnellement, j'ai déjà fait ce genre de méthode et ça marche (A moins de ne pas avoir compris exactement ton problème ).

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Bon... là je suis au boulot, je n'ai pas mes sources, mais je vais essayer de retranscrire mon code.
    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
     
    //une idée de ma classe appelante
     
    public class Jeu implements Serializable {
    ...
    main(){
    jeu = new Jeu();...
    }
     
    public utilisateur creerUtilisateur{
         return Utilisateur.creerUtilisateur(nom, prenom..., ListeUtilisateur,...);
    }
     
    //Maintenant la classe où se trouve ma méthode
    public class Utilisateur implements Serializable{
       public Utilisateur(nom, prénom...){
       ...
       }
     
       public static Utilisateur creerUtilisateur(String nom, String prenom,... TreeMap<Integer,Utilisateur> ListeUtilisateur...){
       //on vérifie avec un que l'utilisateur n'est pas déja dans la liste, sinon on retourne null, je passe les détails
       // puis :
       Utilisateur utilisateur = new Utilisateur(nom, prenom);
       ListeUtilisateur.put(utilisateur.id,utilisateur);
       return utilisateur;
       }
    }
    Désolé s'il y a des fautes de syntaxe, je le fait directement sous l'éditeur du site
    Voilà l'idée que j'avais, je me disais que ça faisait propre...
    Je sais pas si vous avez compris...
    Le problème est que je ne retrouve pas ma liste d'utilisateur avec un utilisateur de plus quand je retourne dans ma classe appelante.

  8. #8
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Je soupçonne un problème au niveau de la class HashTree, celle-ci ne fait pas partie de J2SE.
    Cette dernière refuserait-elle par exemple d'ajouter un utilisateur dont le nom est déjà présent dans la liste ( c'est juste une piste ). Regarde ce que fait exactement cette méthode "put".

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Le truc c'est que tant que je suis dans ma méthode de création de la classe Utilisateur, l'enregistrement existe dans ma liste. J'ai fait le débuggage. Est-ce que le fait qu'il y ait Serializable peut poser problème ?
    Au fait je me suis trompé c'est TreeMap je fais la correction.

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Mis à part le fait que la méthode renvoit void à la place de Utilisateur (mais je pense qu'il s'agit d'une faute d'inatention qui n'eszt pas présente dans ton code), je ne vois pas trop ce qui pourrait poser problème...

    Es-tu sûr de ne pas avoir deux instance de TreeMap différente avec un conflit de nom entre un attribut et un paramètre ou variable locale ?

    Sinon moi j'aurais plus vu l'ajout de l'utilisateur dans la TreeMap dans la classe Jeu que dans la classe Utilisateur (ce n'est pas l'utilisateur qui s'ajoute mais le Jeu qui ajoute l'utilisateur), mais ca c'est un détail...

    a++

  11. #11
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Merci pour la piste, je ne suis pas sûr mais je crois avoir vérifié ce que tu dis.
    Je regarderai ce soir, oui, le void c'est une faute d'inatention. Je vais corriger dans le code.

    Merci aussi pour le conseil "d'architecture" je vais peut-être finir par faire comme ça.

  12. #12
    Membre très actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Par défaut
    Voilà, je crois avoir trouvé l'origine de mon problème, ça vient à priori d'une bataille de thread...
    En fait ma classe Jeu est déclarée dans un objet qui est inscrit dans un RMIRegistry...

    D'autre part il y a un Timer (de swing) qui fait du travail, il est censé sauvegardé de temps en temps une liste en base de données.

    J'ai un cilent qui appelle ma classe en RMI pour créer un utilisateur.
    Si j'observe bien mon débuggage, tant qu'on est dans le thread généré par l'appli RMI, mes objets sont bien entiers et fonctionnent très bien.

    Mais si l'on passe dans le thread généré par le timer, eh bin on ne voit pas les objets qui ont été ajoutés.

    Je pense qu'il faudrait utiliser des "synchronized" mais je ne sais pas faire.
    Est-ce que vous savez ?
    Merci

    Je dois être un peu brouillon, si vous ne comprenez pas, je repasse dans quelques heures !
    A+

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/04/2007, 17h08
  2. [Java] méthode static et passage de paramètre
    Par tomburn dans le forum Langage
    Réponses: 10
    Dernier message: 11/05/2005, 16h19
  3. [FLASH MX2004] [AS2] Classe méthodes static
    Par bolo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 16/12/2004, 18h26
  4. [debutant] Méthode static
    Par iago dans le forum Langage
    Réponses: 12
    Dernier message: 25/11/2004, 17h09
  5. thread et méthodes static
    Par sylpichard dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 17h12

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