toString

Vamos a crear un clase sencilla llamada Persona.

Class Persona

Y además, creamos otra clase llamada GestorPersonas que permita mantener una lista de Personas

Class GestorPersonas

Creamos también un método que nos añada Personas de ejemplo, para no tener que hacerlo a mano:

AddSamplePersons

Y añadimos este método al constructor:

1
2
3
4
5
public GestorPersonas()
{
    personas = new ArrayList<>();
    addSamplePersons();
}

1547539786687

Si creamos un nuevo objeto de la clase GestorPersonas, automáticamente añade dos objetos de la clase Persona.

1547540146620

La clase GestorPersonas tiene un método llamado printAll() para imprimir la lista de las Personas.

1
2
3
4
5
public void printAll(){
    for(Persona persona : personas){
        System.out.println(persona);
    }
}

Por ejemplo,

1
gestorPe1.printAll();

Imprime:

1
2
Persona@47879850
Persona@43b80478

Cuando usamos un objeto como valor en un String, java llama automáticamente al método toString() de la clase Object de la que heredan todas las clases de Java.

Y este método, imprime el nombre de la clase, seguido de @ y de un hash (un identificador único de objeto).

Vamos a crear ahora un método en Persona, llamado getDetails()

1
2
3
public String getDetails(){
    return ("Nombre: " + nombre + ", Apellidos: " + apellidos);
}    

Ahora vamos a modificar el printAll() para que imprima el objeto,

1
2
3
4
5
public void printAll(){
    for(Persona persona : personas){
        System.out.println(persona.getDetails());
    }
}

Ahora cuando llamamos a printAll(), imprime lo siguiente:

1
2
Nombre: Pepe, Apellidos: M
Nombre: Juan, Apellidos: J

Pero un manera más estándar es rescribir el método toString().

1
2
3
public String toString(){
    return ("Nombre: " + nombre + ", Apellidos: " + apellidos);
}    

Y ahora ya podemos volver a usar:

1
2
3
4
5
6
public void printAll(){
    for(Persona persona : personas){
        //Ya no hace falta llamar al método getDetails()
        System.out.println(persona);
    }
}