25 de octubre de 2018

Objetos - método toString()

Antes de empezar a trabajar con objetos voy a explicar su método toString(). Sus características son:
  1. Todos los objetos disponen de uno.
  2. Es un miembro de la clase Object (el tipo más básico del que heredan todas las clases, lo veremos en la sesión de herencia)
  3. Si no tienen definido uno propio, se utilizará el método toString() heredado del pariente más cercano, hasta llegar como máximo el método toString() de la clase Object (el pariente más lejano)
  4. Siempre devuelve una String y no toma parámetros.
  5. Es utilizado en general para tener una representación en texto de un objeto (es lo que utiliza nuestro amigo System.out.print, pero también lo utilizarán por ejemplo elementos de interfaz de usuario para mostrarlo en una tabla o un cuadro combinado por ejemplo). Esto al final será una representación que tendrá significado fácil de entender para una persona.

Por ello y porque ahora mismo nuestra forma de conocer "qué está pasando" es imprimir por consola, vamos a utilizar el método toString() desde este momento para facilitarnos las comprobaciones del resto de sesiones.

El método toString() se usará para tener un texto fácil de leer y representativo de un objeto


Para los ejemplos vamos a usar la clase Coche con el siguiente código:
  public class Coche {
      String modelo;
      String color;
      int numeroDeRuedas;
  }
En este fragmento de código no tenemos mas miembros que las variables de instancia sin inicializar.

Si imprimimos un nuevo objeto del tipo Coche con System.out.println(new Coche()); tenemos la siguiente salida:

Coche@52e922

Aunque no hemos llamado directamente al método toString(), Java usará la sobrecarga del método println(Object x) para tratarlo como un Object y llamarlo por nosotros.

Como vemos esto no es para nada un significado fácil de entender para una persona, con lo que se recomienda cambiar el método toString() para cada clase que hagamos.


Por ahora vamos a usar Eclipse para ayudarnos a crear nuestro método toString(). Pinchamos botón derecho en la línea donde queramos que nos añada el método (yo normalmente estos métodos tan básicos que sobreescribo los pongo al final de todo) y elegimos Source > Generate toString().... Nos sale un asistente donde podemos elegir qué queremos incluir. Por ahora lo dejamos como está con todos los campos marcados y pinchamos en Generate. Nos incluye el siguiente código:
  @Override
  public String toString() {
      return "Coche [modelo=" + modelo + ", color=" + color + ", numeroDeRuedas=" + numeroDeRuedas + "]";
  }
Vemos que es bastante genérico. El formato es poner el nombre de la clase y entre corchetes ir concatenando los atributos que hemos seleccionado en la pantalla del asistente junto con su valor.

Ahora si hacemos una impresión por consola con System.out.println(new Coche()); me produce la siguiente salida:

Coche [modelo=null, color=null, numeroDeRuedas=0]

Este resultado por muy simple que sea ya tiene un significado fácil de leer. Lo ideal sería ponerlo en un formato más práctico para nosotros y no tan esquemático. Os propongo que cambiéis el método para ponerlo en un formato más bonito para vosotros (es sólo crear un String). Cuando lo tengáis podéis ver mi solución propuesta:



  @Override
  public String toString() {
      return modelo + " (" + color + "), " + numeroDeRuedas + " ruedas";
  }
En la siguiente sesión vamos a construir objetos del tipo Coche con constructores personalizados.

No hay comentarios:

Publicar un comentario

Compárteme

Entradas populares