Java Basics - toString, equals, hashCode per Reflection erzeugen

Ohne die Methoden toString, equals, hashCode kann man mit den meisten Java-Objekten nicht viel anfangen – z.B. in Unit-Tests werden Objekte mit equals verglichen und bei Unterschieden mit toString ausgegeben. Praktischerweise kann man sich diese Methoden per Reflection erzeugen, so dass automatisch alle vorhandenen Fields ausgewertet werden:

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

public class ValueBase {
    [...]

    /** {@inheritDoc} */
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

    /** {@inheritDoc} */
    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }

    /** {@inheritDoc} */
    @Override
    public boolean equals(final Object obj) {
        return EqualsBuilder.reflectionEquals(this, obj);
    }
}

Das funktioniert sogar mit Vererbung, wenn man das will: Wenn eine Klasse von ValueBase ableitet, erhält diese automatisch eine ordentliche Implementierung der drei Methoden, bei der alle vorhandenen Fields der Klasse über Reflection evaluiert werden. Das ist für viele Situationen vollkommen ausreichend.

Lesenswerte weitere Infos zu den Details der Reflection im JavaDoc.

Mehr? Aktuelle Artikel oder alle Artikel im Archiv.