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 :

La méthode toString()


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Points : 64
    Points
    64
    Par défaut La méthode toString()
    Bonjour

    A quoi sert la méthode toString() concrètement ? Car elle est souvent utilisé mais je ne la comprends pas

    merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ... À donner une représentation texte de l'objet.

    Par exemple, pour aider au débogage, ou pour écrire l'état d'un objet dans les logs...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par thelvin Voir le message
    ... À donner une représentation texte de l'objet.

    Par exemple, pour aider au débogage, ou pour écrire l'état d'un objet dans les logs...
    J'ai pas compris lol

    regarde pas exemple ce diagramme de classe :

    a quoi sert toString() dans la class Vehicule Nom : P2PA - Voiture.png
Affichages : 1611
Taille : 17,5 Ko ?

  4. #4
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Sachant que la méthode toString est héritée directement de la classe Object, si tu la mets dans un diagramme UML, ça veut dire que tu la surcharge pour lui donner un sens et afficher des informations utiles liées à l'objet

    Sinon, ça se contente d'afficher une chaine de caractère par très causante (avec le nom de la classe et un bout de code hexadécimal représentant son hashcode)


    Donc ça veut dire que les classes ont une méthode toString()... Qui sert à convertir une instance d'objet dans une forme de chaîne de caractère... Mais on ne peut pas te dire pourquoi ils font ça et quel résultat est attendu avec un diagramme
    Je ne suis pas mort, j'ai du travail !

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ouais enfin, il y a pas à se demander pourquoi ou comment.

    Pour un Vehicule dont le nom serait Batmobile de marque RENO, qui coûte 165000 et qui a toutes les options, la méthode toString() a pour but de renvoyer un truc qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Batmobile RENO [GPS, Climatisation, BarreDeToit, SiegeChauffant, VitreElectrique] 165000"
    Après il y a plus qu'à faire un petit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(maBatmobile);
    et la console affiche :
    Batmobile RENO [GPS, Climatisation, BarreDeToit, SiegeChauffant, VitreElectrique] 165000
    Ce qui est tout de même plus pratique que si on avait fait autrement -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Points : 64
    Points
    64
    Par défaut
    D'accord,

    en gros ça nous renvoi une représentation des informations de l'objet quoi !

  7. #7
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    d'ailleurs la méthode toString() est un sujet qui fâche parfois ... effectivement il faut savoir répondre à la question : à quoi ça sert?

    - problème 1: méthode toString() avec héritage : on a parfois des problèmes à faire un super sur le toString() de la classe mère si la classe mère "formatte" trop la chaîne (par ex: avec accolades ouvrantes et fermantes ...)

    - problème 2: dans certains cas il faut savoir créer une chaîne "reinjectable" dans un constructeur de la classe (je veux dire la chaine générée par toString() peut être utilisée pour reconstituer un objet)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    - problème 1: méthode toString() avec héritage : on a parfois des problèmes à faire un super sur le toString() de la classe mère si la classe mère "formatte" trop la chaîne (par ex: avec accolades ouvrantes et fermantes ...)

    - problème 2: dans certains cas il faut savoir créer une chaîne "reinjectable" dans un constructeur de la classe (je veux dire la chaine générée par toString() peut être utilisée pour reconstituer un objet)
    Si tu as des problèmes à ce niveau là, c'est que tu donne à toString un role bien au delà de sa définition, qui est de donner une représentation compréhensible de l'objet et son état, principalement à des fin de debuggage ou de logging. toString n'a nullement besoin de respecter un standard de formattage ni de permettre de reconstituer l'objet. Si t'as besoin de ça, c'est un besoin spécifique à couvrir avec tes propres méthodes

    Dixit la javadoc
    The result should be a concise but informative representation that is easy for a person to read
    Le résultat doit être concis, informatif et facile à lire par une personne. Ni plus ni moins.

  9. #9
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si t'as besoin de ça, c'est un besoin spécifique à couvrir avec tes propres méthodes

    Dixit la javadoc

    Le résultat doit être concis, informatif et facile à lire par une personne. Ni plus ni moins.
    oui et non:

    problème n°1: on hérite parfois de classes dans lequel toString() a un formattage parenthésé (d'ailleurs les IDE ont la mauvaise habitude de fournir ça par défaut). le rajout d'éléments par la classe fille oblige alors à réécrire complètement le toString()

    problème n°2 : effectivement la gestion d'un format texte re-injectable n'entre pas par défaut dans le rôle .... mais est pratique pour des objets valeurs simples (style BigDecimal)

    et j'en rajoute un: "facile à lire par une personne" conduit souvent les programmeurs à écrire des codes non-internationalisable.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    oui et non:

    problème n°1: on hérite parfois de classes dans lequel toString() a un formattage parenthésé (d'ailleurs les IDE ont la mauvaise habitude de fournir ça par défaut). le rajout d'éléments par la classe fille oblige alors à réécrire complètement le toString()
    J'en vois pas la nécessité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public String toString(){
       return "(paramX="+paramX+", paramY="+paramY+", "+super.toString()+")");
    }
    ca te retourne truc genre
    (paramX=2, paramY=3, (paramA=1,paramB=2))

    ce qui en plus évite de confondre les attribut du père et du fils.

    et j'en rajoute un: "facile à lire par une personne" conduit souvent les programmeurs à écrire des codes non-internationalisable.
    toString() n'est pas destiné au front user, donc pas besoin d'aller y tapper de l'internationalisation

Discussions similaires

  1. Méthode toString d'une classe exposée par mon service WCF
    Par duvelmoi9 dans le forum Windows Communication Foundation
    Réponses: 5
    Dernier message: 24/12/2010, 00h16
  2. Erreur sur l'appel de la méthode ToString
    Par Emcy dans le forum C#
    Réponses: 3
    Dernier message: 31/03/2008, 13h05
  3. Méthode toString d'un vector
    Par FranT dans le forum Langage
    Réponses: 6
    Dernier message: 31/10/2006, 17h53
  4. Problème d'affichage avec le méthode toString()
    Par Premium dans le forum Langage
    Réponses: 8
    Dernier message: 26/10/2006, 11h36
  5. Affichage sur plusieurs lignes d'une méthode toString
    Par Flophx dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 24/05/2006, 16h30

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