Metodo ToString()
Come stampare più facilmente un oggetto?
Per visualizzare tutti i dati di un oggetto utilizzando il comando System.out.println(object);
in Java, esiste un metodo chiamato toString();
.
toString()
Il metodo toString
in Java è un metodo integrato che appartiene alla classe Object
. Viene utilizzato per restituire una rappresentazione testuale di un oggetto. Di default, quando chiamiamo toString
su un oggetto, restituisce una stringa che contiene il nome della classe seguito dall'hashcode dell'oggetto.
Vediamo l'esempio:
Main.java
1234567891011121314151617181920package 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, in termini semplici, è un identificatore univoco per un oggetto che è memorizzato in memoria. Possiamo anche visualizzare il codice hash di un oggetto chiamando il metodo hashCode()
su di esso, ad esempio:
Main.java
123456789101112131415161718192021package 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); } }
In questo caso, sorge la domanda: come possiamo ottenere qualcosa di più specifico invece del codice hash di un oggetto? Per tali casi, possiamo sovrascrivere il metodo toString()
.
Ereditarietà e sovrascrittura dei metodi sono argomenti approfonditi che studieremo in un corso separato. Per ora, utilizzeremo la sovrascrittura dei metodi solo per il metodo toString()
.
Come usare toString()
Per sovrascrivere un metodo, è necessario utilizzare la seguente sintassi:
Main.java
1234@Override public String toString() { // block of code }
Si utilizza l’annotazione @Override
prima di questo metodo. Con questa annotazione, il compilatore riconosce che si sta sovrascrivendo questo metodo. Successivamente, si specifica la sintassi public String toString()
, indicando quale metodo esatto si sta sovrascrivendo.
Nel corpo di questo metodo, si definisce come l’oggetto deve essere rappresentato come stringa. Sovrascriviamo il metodo per la classe Person
:
Person.java
12345678910111213141516171819class 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 + "."; } }
Il comando System.lineSeparator()
viene utilizzato per creare una nuova riga.
Abbiamo definito come dovrebbe apparire il nostro oggetto concatenando stringhe con i relativi valori. Pertanto, quando proviamo a stampare un oggetto della classe Person
, vedremo informazioni dettagliate su ciascun campo.
Stampiamo un oggetto utilizzando il metodo main
per vedere come appare:
Main.java
12345678910111213141516171819202122232425262728package 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 + "."; } }
Abbiamo ottenuto informazioni sulla classe a cui appartiene l'oggetto bob
e dettagli su tutti i suoi campi.
Possiamo quindi sovrascrivere e definire il metodo toString()
per visualizzare le informazioni desiderate quando si stampa un oggetto. Creiamo un altro oggetto di questa classe utilizzando il costruttore per vedere e rafforzare come il metodo toString()
trasforma l'oggetto:
Main.java
123456789101112131415161718192021222324252627282930package 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(); } }
Possiamo vedere che il nuovo oggetto alice
viene visualizzato nella console utilizzando lo stesso modello.
Conclusione
Utilizzando il metodo toString()
, abbiamo notevolmente semplificato il processo di visualizzazione delle informazioni sugli oggetti a schermo, permettendoci di risparmiare spazio nel metodo main.
1. Perché abbiamo bisogno del metodo toString()
?
2. Quale annotazione dovrebbe essere utilizzata sopra il metodo toString()
?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione