Conteúdo do Curso
Java Avançado
Java Avançado
Método ToString()
Como imprimir um objeto de forma mais fácil?
Para exibir todos os dados de um objeto utilizando o comando System.out.println(object);
em Java, existe um método chamado toString();
.
toString()
O método toString
em Java é um método incorporado que pertence à classe Object
. Ele é utilizado para retornar uma representação em string de um objeto. Por padrão, quando chamamos toString
em um objeto, ele retorna uma string que contém o nome da classe seguido pelo hashcode do objeto.
Vamos analisar o exemplo:
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
Um hashcode, em termos simples, é um identificador único para um objeto que está armazenado na memória. Também podemos visualizar o hash code de um objeto chamando o método hashCode()
sobre ele, por exemplo:
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); } }
Nesse caso, surge a seguinte questão: como obter algo mais específico em vez do hash code de um objeto? Para esses casos, é possível sobrescrever o método toString()
.
Herança e sobrescrita de métodos são tópicos extensos que serão estudados em um curso separado. Por enquanto, utilizaremos a sobrescrita de métodos apenas para o método toString()
.
Como utilizar toString()
Para sobrescrever um método, é necessário utilizar a seguinte sintaxe:
Main.java
@Override public String toString() { // block of code }
Utiliza-se a anotação @Override
antes deste método. Com essa anotação, o compilador reconhece que este método está sendo sobrescrito. Em seguida, especifica-se a sintaxe public String toString()
, indicando exatamente qual método está sendo sobrescrito.
No corpo deste método, define-se como o objeto deve ser representado como uma string. Vamos sobrescrever o método para a 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 + "."; } }
O comando System.lineSeparator()
é utilizado para criar uma nova linha.
Definimos como nosso objeto deve ser exibido ao concatenar strings com seus valores. Portanto, ao tentar imprimir um objeto da classe Person
, veremos informações detalhadas sobre cada campo.
Vamos exibir um objeto usando o método main
e observar como ele aparece:
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 + "."; } }
Obtivemos informações sobre a classe à qual o objeto bob
pertence e detalhes sobre todos os seus campos.
Assim, é possível sobrescrever e definir o método toString()
para exibir as informações desejadas ao imprimir um objeto. Vamos criar outro objeto dessa classe utilizando o construtor para visualizar e reforçar como o método toString()
transforma o objeto:
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(); } }
Podemos ver que o novo objeto alice
é exibido no console usando o mesmo modelo.
Conclusão
Ao utilizar o método toString()
, simplificamos bastante o processo de exibição das informações do objeto na tela, permitindo economizar espaço no método principal.
1. Por que precisamos do método toString()
?
2. Qual anotação deve ser utilizada acima do método toString()
?
Obrigado pelo seu feedback!