Contenu du cours
Java Étendu
Java Étendu
Méthode toString()
Comment imprimer plus facilement un objet ?
Pour afficher toutes les données d'un objet en utilisant la commande System.out.println(object);
en Java, il existe une méthode appelée toString();
.
toString()
La méthode toString
en Java est une méthode intégrée qui appartient à la classe Object
. Elle est utilisée pour retourner une représentation sous forme de chaîne de caractères d'un objet. Par défaut, lorsque nous appelons toString
sur un objet, elle retourne une chaîne qui contient le nom de la classe suivi du hashcode de l'objet.
Regardons l'exemple :
Main
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } }
HashCode
Un hashcode, en termes simples, est un identifiant unique pour un objet qui est stocké en mémoire. Nous pouvons également voir le code de hachage d'un objet en appelant la méthode hashCode()
sur celui-ci, par exemple :
Main
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); int code = bob.hashCode(); System.out.println(code); } }
Dans ce cas, la question se pose : comment pouvons-nous obtenir quelque chose de plus spécifique au lieu du code de hachage d'un objet ? Pour de tels cas, nous pouvons redéfinir la méthode toString()
.
L'héritage et la redéfinition de méthode sont des sujets vastes que nous étudierons dans un cours séparé. Pour l'instant, nous utiliserons la redéfinition de méthode uniquement pour la méthode toString()
.
Comment utiliser toString()
Pour redéfinir une méthode, nous devons utiliser la syntaxe suivante :
Main
@Override public String toString() { // block of code }
Nous utilisons l'annotation @Override
avant cette méthode. Avec cette annotation, le compilateur reconnaît que nous surchargeons cette méthode. Ensuite, nous spécifions la syntaxe public String toString()
, indiquant quelle méthode exacte nous surchargeons.
Dans le corps de cette méthode, nous définirons comment notre objet doit être représenté sous forme de chaîne. Surchargeons la méthode pour la classe Person
:
Person
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
La commande System.lineSeparator()
est utilisée pour créer une nouvelle ligne.
Nous avons défini comment notre objet devrait apparaître en concaténant des chaînes avec leurs valeurs. Par conséquent, lorsque nous essayons d'imprimer un objet de la classe Person
, nous verrons des informations détaillées sur chaque champ.
Sortons un objet en utilisant la méthode main
et voyons à quoi il ressemble :
Main
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Nous avons obtenu des informations sur la classe à laquelle appartient l'objet bob
et des détails sur tous ses champs.
Ainsi, nous pouvons redéfinir et définir la méthode toString()
pour afficher les informations souhaitées lors de l'impression d'un objet. Créons un autre objet de cette classe en utilisant le constructeur pour voir et renforcer comment la méthode toString()
transforme l'objet :
Main
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); Person alice = new Person("Alice", 17, "female"); System.out.println(alice); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "." + System.lineSeparator(); } }
Nous pouvons voir que le nouvel objet alice
est affiché dans la console en utilisant le même modèle.
Conclusion
En utilisant la méthode toString()
, nous avons grandement simplifié le processus d'affichage des informations de l'objet à l'écran, nous permettant d'économiser de l'espace dans la méthode principale.
1. Pourquoi avons-nous besoin de la méthode toString()
?
2. Quelle annotation doit être utilisée au-dessus de la méthode toString()
?
Merci pour vos commentaires !