Listado completo de tutoriales

98 - Generación automático de los métodos toString y equals con Eclipse


Vimos en conceptos anteriores que generalmente sobreescribimos los métodos toString y equals heredados de la clase Object.

Al ser una actividad tan común los Ide (Integrated Development Enviroment) de Java (Eclipse, NetBeans, IntelliJ IDEA etc.) nos brindan estas funcionalidades en forma automática.

Problema:

Plantear un clase llamada 'Persona' definir los atributos nombre y edad. Crear el constructor y los métodos para modificar y recuperar los valores de los atributos, además implementar los métodos toString y equals mediante las herramientas que provee Eclipse.

En la opción 'source' de Eclipse debemos seleccionar:

java Eclipse menú generación de equals y toString

Cuando elegimos generar 'toString' podemos hacer algunas configuraciones:

java Eclipse generación toString diálogo

Cuando generamos el método 'equals' también se genera el método 'hashCode':

java Eclipse generación  diálogo equals y hashCode

En el diálogo podemos seleccionar que campos intervienen en el método 'equals'.

El método hashCode es importante para un manejo eficiente de colecciones de la clase Persona, por ejemplo ArrayList, LinkedList, HashSet, HashMap etc. Si dejamos por defecto el método hashCode heredado de la clase Object nuestro programa no será tan eficiente trabajando con estas colecciones.

Clase: Persona

public class Persona {
    private String nombre;
    private int edad;

    public Persona(String nombre, int edad) {
        super();
        this.nombre = nombre;
        this.edad = edad;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    @Override
    public String toString() {
        return "Persona [nombre=" + nombre + ", edad=" + edad + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + edad;
        result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Persona other = (Persona) obj;
        if (edad != other.edad)
            return false;
        if (nombre == null) {
            if (other.nombre != null)
                return false;
        } else if (!nombre.equals(other.nombre))
            return false;
        return true;
    }

}

Problema propuesto

  1. Desarrollar una clase que represente un Cuadrado que tenga como atributo su lado y los siguientes métodos: constructor, getLado, setLado, toString, equals y hashCode.
    Utilizar las herramientas de Eclipse para generarlos.
Solución
public class Cuadrado {
    private int lado;

    public Cuadrado(int lado) {
        super();
        this.lado = lado;
    }

    public int getLado() {
        return lado;
    }

    public void setLado(int lado) {
        this.lado = lado;
    }

    @Override
    public String toString() {
        return "Cuadrado [lado=" + lado + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + lado;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Cuadrado other = (Cuadrado) obj;
        if (lado != other.lado)
            return false;
        return true;
    }

}

Retornar