Die Utility-Klasse java.lang.Objects

In Java 7 ist die Klasse Objects hinzugekommen, die einige statische Utility-Funktionen bereithält. Sie führen in erster Linie null-Tests durch.

null-Tests um equals()/hashCode()/toString()

Ist zum Beispiel eine Objektvariable name einer Person null, so kann nicht einfach name.toString() aufgerufen werden, ohne dass eine NullPointerException folgt. Drei Methoden von Objects führen null-Test durch, bevor sie an die Object-Methode equals()/hashCode()/toString() weiterleiten. Eine zusätzliche Hilfsmethode arbeitet mit Comparatoren, die in im Kapitel über Datenstrukturen genauer vorgestellt werden.

class java.lang.Objects
§          static boolean equals( Object a, Object b )
Liefert true wenn beide Argument entweder null sind, oder a.equls(b) ebenfalls true ergibt. Sonst false. Das Objects.equals(null, null) die Rückgabe true ergibt ist sinnvoll und so erspart die Methode einige händische Tests.
§          static int hashCode( Object o )
Liefert 0 wenn o gleich null ist, sonst o.hashCode().
§          static String toString(Object o)
Liefert den String "null" wen das Argument null ist sonst o.toString().
§          static int compare( T a, T b, Comparator c )
Liefert 0, wenn a und b beide entweder null sind, oder der Comparator die Objekte a und b für gleich erklärt. Sind a und b beide ungleich null, so ist die Rückgabe c.compare(a, b). Ist nur a oder b gleich null, so hängt es vom Comparator ab und der Reihenfolge der Parameter ab.
Erinnern wir uns ans hashCode() vom Spieler, wo der Spielername in den Hashcode eingehen soll, so sehen wir, wo die statische Objects.hashCode()-Methode gut untergebracht werden kann.
com/tutego/insel/object/hashcode/Player.java, hashCode() Ausschnitt
result = 31 * result + ((name == null) ? 0 : name.hashCode());
Mit Objects.hashCode() verkürzt sich dies – nicht spektakulär im Sinne von eingesparten Zeichen – zu:
result = 31 * result + Objects.hashCode( name.hashCode() );

Null-Prüfungen mit eingebauter Ausnahmebehandlung

Zu den drei statischen Methoden kommen zwei hinzu, die null-Prüfungen übernehmen und im Fehlerfall eine Ausnahme auslösen. Das ist praktisch bei Konstruktoren oder Settern, die Werte initialisieren sollen, aber verhindern möchten, dass null durchgeleitet wird.

Beispiel   Die Methde setName() soll keine name-Argument gleich null erlauben.
public void setName( String name )
{
 this.name = Objects.nonNull( name );
}
Alternativ ist eine Fehlermeldung möglich:
public void setName( String name )
{
 this.name = Objects.nonNull( name, "name is not supposed to be null" );
}


class java.lang.Objects

§          static T nonNull( T obj )
Löst eine NullPointerExcpetion aus, wenn obj gleich null ist. Sonst lieferte obj als Rückgabe.
§          static T nonNull( T obj, String message )
Wie nonNull(obj), nur das die Meldung der NullPointerExcpeption bestimmt wird.

Labels: ,

0 Antwort(en) auf ›Die Utility-Klasse java.lang.Objects‹

Kommentar veröffentlichen