Contenu du cours
Java Avancé
Java Avancé
Méthode ToString()
Comment faciliter l'affichage d'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 l'on appelle toString
sur un objet, elle retourne une chaîne contenant le nom de la classe suivi du hashcode de l'objet.
Examinons l'exemple :
Main.java
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 stocké en mémoire. Il est également possible d'afficher le code de hachage d'un objet en appelant la méthode hashCode()
sur celui-ci, par exemple :
Main.java
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, une question se pose : comment obtenir quelque chose de plus spécifique que le code de hachage d'un objet ? Pour de tels cas, il est possible de redéfinir la méthode toString()
.
L'héritage et la redéfinition de méthode sont des sujets approfondis qui seront étudiés dans un cours séparé. Pour l'instant, la redéfinition de méthode sera utilisée uniquement pour la méthode toString()
.
Utilisation de toString()
Pour redéfinir une méthode, il convient d'utiliser la syntaxe suivante :
Main.java
@Override public String toString() { // block of code }
Nous utilisons l’annotation @Override
avant cette méthode. Grâce à cette annotation, le compilateur reconnaît que nous redéfinissons cette méthode. Ensuite, nous spécifions la syntaxe public String toString()
, indiquant précisément quelle méthode nous redéfinissons.
Dans le corps de cette méthode, nous définirons comment notre objet doit être représenté sous forme de chaîne de caractères. Redéfinissons la méthode pour la classe Person
:
Person.java
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 l'apparence de notre objet en concaténant des chaînes de caractères avec leurs valeurs. Ainsi, lorsque nous essayons d'afficher un objet de la classe Person
, nous verrons des informations détaillées sur chaque champ.
Affichons un objet à l'aide de la méthode main
pour observer le résultat :
Main.java
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
ainsi que des détails sur tous ses champs.
Ainsi, nous pouvons redéfinir et spécifier la méthode toString()
afin d'afficher les informations souhaitées lors de l'affichage d'un objet. Créons un autre objet de cette classe à l'aide du constructeur pour observer et confirmer comment la méthode toString()
transforme l'objet :
Main.java
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 d'un objet à l'écran, ce qui nous permet 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 !