Quel est le meilleur style standard pour un toString mise en œuvre?
Nous avons beaucoup d'objets pour lesquels nous aimons à mettre en œuvre un simple toString
à la sortie des attributs de l'objet. Certains de ces attributs peut être complexe des objets eux-mêmes.
Est-il un standard, ou tout simplement l'une des meilleures pratiques pour un style? Je suis en train de penser à quelque chose comme:
[SimpleClassName] { prop1:value, prop2:value }
Dans ce cas, un imbriquée valeur ressemblerait à:
[SimpleClassName] { prop1:value, prop2:[NestedObject] { prop3:value}}
Nous sommes à l'aide de Java, mais je me surprends à poser la même question dans la plupart des langues!
- Astuce: un IDE comme Eclipse pouvez générer un
toString()
. Explorez le menu Source. Gain de temps! - Je pense qu'un réel gain de temps serait d'utiliser un débogueur. Vous pouvez simplement forcer l'exécution en tout point, puis impression de toutes les informations dont vous avez besoin sur les objets disponibles, obtenir une pile de piste, effectuer les modifications nécessaires, puis de continuer. Tous, sans ballonnements votre code avec toString méthodes et des traces. Pourquoi s'embêter alors le débogueur fait tout pour vous, pour chaque objet?
Vous devez vous connecter pour publier un commentaire.
Personnellement, je trouve le mélange de
[]
et{}
pas si facile d'obtenir une vue immédiate de la hiérarchie.J'aime ce format (et je l'ai vu utilisé dans un certain nombre de places):
Il y a également la possibilité d'ajouter un identifiant avec
@
, par exemple le style par défaut pour la commons-langToStringBuilder
fait que (à l'aide de son propre exemple):toString
méthode dans ce format.Je pense que le format produit par Goyave's MoreObjects.toStringHelper() est assez sympa, mais c'est surtout juste bon d'avoir une certaine cohérence dans le format que vous utilisez:
json syntaxe semble correspondre assez bien car il a été conçu spécifiquement pour représenter des objets complexes comme des chaînes
toString
devrait vraiment viser pour retourner une seule ligne, donc quelque chose comme json peut être trop verbeux.Pas une réponse directe à la question, cependant ci-dessous serait un gain de temps au cours du développement initial:
Avertissement: Apache Commons bibliothèque est utilisée.
xreflect
dansJava > Editor > Templates
; Ajouter ci-dessous dans son modèle textarea:OK
,OK
xreflect
et appuyez sur Ctrl + Espace pour la saisie automatique equals(), toString() et hashCode() méthodes automatiquement.Pas. Le "meilleur" de sortie pour un
toString()
méthode est déterminée par ce que vous voulez l'utiliser pour. Est-il pour la sérialisation de l'état de l'objet dans une forme qui lui permet d'être désérialisé? Est-il pour la création de messages de débogage? Est-il pour le rendu de l'objet d'affichage pour les utilisateurs finaux?Si vous souhaitez développer un style de la maison pour votre debug de journalisation/
toString()
méthodes, c'est bien. Mais s'il y avait une exigence pour cela, je ne serais pas la peine. IMO, c'est l'effort qui pourrait être mieux dépensé ailleurs.Si vos objets ont quelque chose qui pourrait être utile comme un identifiant, j'aimerais mettre en place quelque chose comme votre deuxième exemple:
Où la
id
est tout ce qui fait sens pour que l'objet doit être un identificateur est le nom de l'canoniquePerson
objet, une clé primaire pour un objet à partir d'une base de données, etc.Puisque vous m'avez demandé ce que d'autres projets open source pour, voici comment jEdit t-il, qui est similaire à Wouter de l':
découvrez phps print_r($obj, true)
ou aussi la fonction serialize (), pourrait travailler, ne sais pas exactement ce que son besoin pour.
jsons est également une solution propre, surtout si tu veux importer les données en javascript environbments