Contenido del Curso
Java Avanzado
Java Avanzado
Método toString()
¿Cómo imprimir un objeto de manera más sencilla?
Para mostrar todos los datos de un objeto utilizando el comando System.out.println(object);
en Java, existe un método llamado toString();
.
toString()
El método toString
en Java es un método incorporado que pertenece a la clase Object
. Se utiliza para devolver una representación en forma de cadena de un objeto. Por defecto, cuando llamamos a toString
en un objeto, devuelve una cadena que contiene el nombre de la clase seguido del hashcode del objeto.
Veamos el ejemplo:
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 términos simples, es un identificador único para un objeto que está almacenado en memoria. También podemos ver el hash code de un objeto llamando al método hashCode()
sobre él, por ejemplo:
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); } }
En ese caso, surge la pregunta: ¿cómo podemos obtener algo más específico en lugar del hash code de un objeto? Para tales casos, podemos sobrescribir el método toString()
.
Herencia y sobrescritura de métodos son temas extensos que estudiaremos en un curso aparte. Por ahora, utilizaremos la sobrescritura de métodos solo para el método toString()
.
Cómo usar toString()
Para sobrescribir un método, necesitamos utilizar la siguiente sintaxis:
Main.java
@Override public String toString() { // block of code }
Utilizamos la anotación @Override
antes de este método. Con esta anotación, el compilador reconoce que estamos sobrescribiendo este método. A continuación, especificamos la sintaxis public String toString()
, indicando exactamente qué método estamos sobrescribiendo.
En el cuerpo de este método, definiremos cómo debe representarse nuestro objeto como una cadena. Vamos a sobrescribir el método para la clase 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 + "."; } }
El comando System.lineSeparator()
se utiliza para crear una nueva línea.
Hemos definido cómo debe aparecer nuestro objeto concatenando cadenas con sus valores. Por lo tanto, cuando intentamos imprimir un objeto de la clase Person
, veremos información detallada sobre cada campo.
Mostremos un objeto utilizando el método main
y observemos cómo se visualiza:
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 + "."; } }
Hemos obtenido información sobre la clase a la que pertenece el objeto bob
y detalles sobre todos sus campos.
De este modo, podemos sobrescribir y definir el método toString()
para mostrar la información deseada al imprimir un objeto. Creemos otro objeto de esta clase utilizando el constructor para ver y reforzar cómo el método toString()
transforma el 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 observar que el nuevo objeto alice
se muestra en la consola utilizando la misma plantilla.
Conclusión
Al utilizar el método toString()
, hemos simplificado considerablemente el proceso de mostrar la información de un objeto en pantalla, permitiéndonos ahorrar espacio en el método principal.
1. ¿Por qué necesitamos el método toString()
?
2. ¿Qué anotación se debe usar encima del método toString()
?
¡Gracias por tus comentarios!