Méthode Java toString
toString
La méthode en Java est utilisée pour fournir des informations claires et suffisantes sur un objet ( Object
) sous une forme lisible par l'homme. Une substitution de méthode appropriée toString
peut aider à la journalisation et au débogage d'un programme Java en fournissant des informations précieuses et importantes. Puisqu’elle toString()
est définie dans java.lang.Object
une classe et que son implémentation par défaut ne fournit pas beaucoup d’informations, il est toujours préférable de remplacer cette méthode dans une classe descendante. En fait, si vous créez une classe importante ou générale de type Order
, Trade
or Employee
, remplacez toujours equals , hashCode , compareTo et toString
les méthodes en Java. Par défaut, l'implémentation toString
produit une sortie sous la forme , package.class@hashCode
par exemple pour notre exemple la méthode de classe imprimera test.Country@18e2b22 où 18e2b22 est le code de hachage de l'objet en hexadécimal, si vous appelez la méthode hashCode elle renverra 260943370 qui est le équivalent décimal de 18e2b22. Ces informations ne sont pas particulièrement utiles lors de la recherche d'un problème. Regardons un exemple concret où vous devez trouver un problème dans votre connexion réseau. Dans le cas où vous voudriez savoir à quel hôte et à quel port votre système essaie de se connecter et si ou imprime uniquement les informations par défaut, ce sera impossible d'imaginer le vrai problème, mais avec une implémentation remplacée, ils peuvent fournir des informations utiles telles que le nom d'hôte et le numéro de port. Dans ce didacticiel Java, nous donnerons quelques conseils sur le remplacement de méthode avec des exemples de code. toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
Comment remplacer la méthode toString en Java :
Imprime la date formatée (c'est-à-dire jour/mois/année) au lieu de la valeur brute. C'est un indice très utile lors du remplacement d'une méthode JavatoString
. toString()
La classe normale java.util.Date
ne génère pas de date formatée et inclut de nombreux détails qui ne sont pas toujours nécessaires. Si vous utilisez un DateFormat partiel , c'est-à-dire jj-MM-aa dans votre application, vous voudriez certainement voir ce format au lieu de celui par défaut. L'EDI ne génère généralement pas de sortie formatée Date
et c'est quelque chose que vous devrez faire vous-même, mais cela en vaut la peine. Lisez Comment imprimer la date au format jjMMaa en Java pour plus de détails sur le formatage Date
en Java. Vous pouvez également utiliser la classe SimpleDataFormat ou la bibliothèque horaire Joda Date pour cela.
Documenter le format toString
Si votre méthodetoString()
ne génère pas de données sous la forme field=value, alors c'est une bonne idée de documenter le format de sortie toString
, en particulier pour les objets importants comme Employee ou Student. Par exemple, si une méthode toString()
de classe Работник(Employee)
imprime " John-101-Sales-9846387321 ", alors une bonne pratique serait de spécifier le format comme " nom-id-department-contact ", mais en même temps, ne permettez pas au client d'obtenir informations de la méthode toString()
, vous devez toujours fournir des méthodes appropriées pour récupérer les données, telles que getName()
, getId()
, getContact()
etc., car les informations obtenues à partir toString()
de la représentation d'objet sont fragiles et sujettes aux erreurs, le client doit donc toujours disposer d'un chemin propre pour obtenir le information.
Utilisez StringBuilder pour composer la sortie de toString()
Si vous écrivez du code pour une méthodetoString()
en Java, utilisez StringBuilder pour ajouter des attributs individuels. Si vous utilisez un IDE comme Eclipse , Netbeans ou IntelliJ, utiliser StringBuilder
la méthode and append()
au lieu de l'opérateur + pour composer toString
est également la voie à suivre. Par défaut, Eclipse et Netbeans génèrent toString
avec l'opérateur de concaténation.
Utilisation de l'annotation @Override
L’utilisation@Override
du remplacement de méthode en Java est l’une des meilleures pratiques du langage. Mais cet indice n'est pas aussi important qu'il le serait dans le cas de la substitution des méthodes equals()
and compareTo()
, car une surcharge au lieu d'une substitution peut créer des erreurs plus subtiles et difficiles à calculer. Dans tous les cas, il est préférable d'utiliser l'annotation @Overrride
.
Imprimer le contenu d'un tableau au lieu d'imprimer l'objet tableau
Un tableau est un objet en Java mais il ne remplace pas une méthodetoString
et lorsque vous imprimez un tableau, le format de sortie par défaut n'est pas très utile car nous aimerions voir le contenu du tableau. À propos, c'est une autre raison pour laquelle le tableau char[] est préférable à String pour stocker des données sensibles telles qu'un mot de passe. Prenez le temps de voir si l'impression du contenu d'un tableau aide ou non vos clients, et si cela a du sens, imprimez le contenu du tableau au lieu de l'objet lui-même. Pour des raisons de performances, il est préférable d'utiliser Collection
tel ArrayList
ou HashSet pour Array
stocker d'autres objets.
Conseils bonus
Quelques conseils supplémentaires sur le remplacement de méthodetoString
en Java.
-
Imprimez la sortie
toString
sur plusieurs lignes ou sur une seule en fonction de sa longueur. -
Incluez les noms de classe complets dans la représentation
toString
, en d’autres termespackage.class
pour éviter tout malentendu. -
Vous pouvez ignorer les valeurs nulles ou les afficher, mais il est préférable de les afficher. Parfois, ils sont utiles car ils montrent quel champ est présent
null
lors d'un incident, par exemple NullPointerException . -
Utilisez un format clé-valeur, par exemple
member.name=member.value
, la plupart des IDE le prennent en charge. -
Incluez les membres hérités si vous pensez qu’ils doivent fournir les informations nécessaires à la classe héritière.
-
Parfois un objet contient de nombreux paramètres facultatifs et obligatoires, comme nous l'avons montré dans notre exemple de modèle Builder , lorsqu'il est quasiment impossible d'imprimer tous les champs, dans ce cas nous pouvons imprimer uniquement les champs obligatoires, d'autant plus que nous en avons des facultatifs.
GO TO FULL VERSION