53 votes

Utilisation de Objects.ToStringHelper de Google Guava

J'ai utilisé ToStringBuilder.reflectionToString(class) dans commons-lang, pour implémenter toString() pour les DTO simples. Maintenant, j'essaie d'utiliser Google Guava au lieu de la bibliothèque Apache commons. Et j'ai trouvé Objects.ToStringHelper en goyave. Mais c'est trop verbeux s'il y a beaucoup de membres dans la classe. Par exemple:

 @Override
public String toString() {
    return Objects.toStringHelper(this.getClass()).add("name", name)
            .add("emailAddress", emailAddress)
            .add("department", department).add("yearJoined", yearJoined)
            .toString();
}
 

est beaucoup plus simple si j'utilise commons-lang:

 @Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}
 

Existe-t-il de meilleures méthodes pour implémenter toString() avec Guava, pas avec commons-lang?

111voto

Etienne Neveu Points 7454

J'ai un petit truc pour Objects.toStringHelper(). J'ai configuré IntelliJ IDÉE de l'utiliser lorsque l'auto-générer toString() méthodes. Je suppose que vous pouvez faire de même dans Eclipse. Voici comment le faire dans l'Ide:

  • aller à l'intérieur d'une classe
  • hit Alt + Insert à popup "Générer" menu
  • choisissez toString()
  • cliquez sur le bouton "Paramètres"
  • aller à la "Modèles" de l'onglet
  • créer un nouveau modèle appelé "la Goyave, les Objets.toStringHelper()" (je l'ai fait en copiant le "ToStringBuilder" modèle)
  • changer le modèle de:

    public String toString() {
    #set ($autoImportPackages = "com.google.common.base.Objects")
        return Objects.toStringHelper(this)
    #foreach ($member in $members)
        .add("$member.name", $member.accessor)
    #end
        .toString();
    }
    
  • enregistrer le modèle, fermez la fenêtre "Paramètres" et "Générer toString()" de windows

  • vous pouvez maintenant choisir la Goyave modèle lors de la génération d' toString() méthodes

Lorsque vous ajoutez un nouveau champ à la classe, il suffit de re-générer l' toString() méthode (IDÉE va vous demander de confirmer que vous souhaitez remplacer l'existante toString() méthode).

30voto

ColinD Points 48573

Objects.toStringHelper est destiné à vous aider à rédiger toString() méthodes avec un format cohérent facilement, mais il vous donne le contrôle sur ce que les champs à inclure dans toString() et devrait avoir des performances comparables à l'écrire manuellement. reflectionToString est plus court à taper, mais il ne vous donne pas de contrôle explicite sur les champs inclus et, ainsi, il utilise la réflexion. Je ne vois pas cela comme une meilleure alternative.

Comme une note de côté, je pense que l'utilisation d' toStringHelper semble beaucoup plus clair si vous mettez un add d'appels par ligne.

11voto

marek.dominiak Points 83

Il existe un plugin http://sourceforge.net/projects/guavaeclipse/ (très petit) qui peut générer des méthodes toString (ainsi que hashcode) à l'aide de classes Guava. C'est une bonne solution car les méthodes générées sont vraiment petites et n'encombrent pas la classe.

4voto

mcmoe Points 28

Il est à noter que Objects.toStringHelper est obsolète (à supprimer complètement en juin 2016) au profit de MoreObjects.toStringHelper. J'ai copié le modèle de goyave par défaut de mon IDE Intellij dans un nouveau modèle utilisant plutôt MoreObjects. À votre santé.

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