96 votes

Comment surcharger toString() correctement en Java ?

Ça a l'air un peu stupide, mais j'ai besoin d'aide pour mon toString() et c'est très irritant. J'ai essayé de faire des recherches en ligne parce que le toString est celle où il se plante et "ne trouve pas le constructeur Kid #2" alors qu'il est là et je fais même autre chose et ça ne marche pas. Ok, c'était beaucoup, alors voici mon code :

import java.util.*; 
   class Kid {  
      String name; 
      double height; 
      GregorianCalendar bDay; 

      public Kid () { 
         this.name = "HEAD";
         this.height = 1; 
         this.bDay = new GregorianCalendar(1111,1,1); 
      } 

      public Kid (String n, double h, String date) {
      // method that toString() can't find somehow
         StringTokenizer st = new StringTokenizer(date, "/", true);
         n = this.name;
         h = this.height;
      } 

      public String toString() { 
         return Kid(this.name, this.height, this.bDay);
      } 
   } //end class 

Ok. Donc mon toString ci-dessus (je sais, mon troisième paramètre n'est pas bon, il devrait être une chaîne) est mauvais. Si je code en dur une valeur pour le troisième paramètre, il se détraque et dit qu'il ne peut pas le trouver (en haut). Alors comment puis-je obtenir la date et la décomposer ?

La classe qui l'appelle est la suivante

class Driver {   
   public static void main (String[] args) {   
      Kid kid1 = new Kid("Lexie", 2.6, "11/5/2009");   
      System.out.println(kid1.toString());
   } //end main method 
} //end class  

J'ai essayé de rechercher des constructeurs multiples et cela n'a pas vraiment aidé. J'ai essayé de rechercher toString() et essayé d'utiliser les méthodes précédentes toString() des méthodes logiques que j'ai créées précédemment mais c'est tout nouveau donc ça n'a jamais fonctionné.

Aide ?

1voto

nobar Points 5849

Si vous utilisez seulement toString() pour le débogage d'un DTO vous pouvez générer lisible par l'homme automatiquement avec quelque chose comme ce qui suit :

import com.fasterxml.jackson.databind.ObjectMapper;
...
public String toString() {
    try { return new ObjectMapper().writeValueAsString(this); }
    catch (Exception e) { return "{ObjectMapper failed}"; }
}

Cependant, cela n'est pas approprié pour les déploiements de production si le DTO peut contenir des PII (qui ne devraient pas être capturés dans les journaux).

1voto

logbasex Points 574

Toujours avoir un moyen facile : Clic droit > Générer > toString() > Sélectionnez le modèle que vous voulez. enter image description here

0voto

user666 Points 189

Le meilleur moyen, à mon avis, est d'utiliser la bibliothèque google gson :

        @Override
public String toString() {
    return new GsonBuilder().setPrettyPrinting().create().toJson(this);
}

ou la méthode de réflexion lang d'apache commons

0voto

The Guy Points 381
  1. si vous utilisez le bloc-notes : alors

    public String toString(){
    
     return ""; ---now here you can use variables which you have created for your class
    
    }
  2. si vous utilisez l'IDE eclipse, alors appuyez sur

    -alt +shift +s 

    -Cliquez sur la méthode override toString, vous obtiendrez des options pour sélectionner le type de variables que vous voulez sélectionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X