Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 
Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Objektorientierte Beziehungsfragen
7 Ausnahmen müssen sein
8 Äußere.innere Klassen
9 Besondere Typen der Java SE
10 Generics<T>
11 Lambda-Ausdrücke und funktionale Programmierung
12 Architektur, Design und angewandte Objektorientierung
13 Komponenten, JavaBeans und Module
14 Die Klassenbibliothek
15 Einführung in die nebenläufige Programmierung
16 Einführung in Datenstrukturen und Algorithmen
17 Einführung in grafische Oberflächen
18 Einführung in Dateien und Datenströme
19 Einführung ins Datenbankmanagement mit JDBC
20 Einführung in <XML>
21 Testen mit JUnit
22 Bits und Bytes und Mathematisches
23 Die Werkzeuge des JDK
A Java SE-Paketübersicht
Stichwortverzeichnis


Download:

- Beispielprogramme, ca. 35,4 MB


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil 9 Besondere Typen der Java SE
Pfeil 9.1 Object ist die Mutter aller Klassen
Pfeil 9.1.1 Klassenobjekte
Pfeil 9.1.2 Objektidentifikation mit toString()
Pfeil 9.1.3 Objektgleichheit mit equals(…) und Identität
Pfeil 9.1.4 Klonen eines Objekts mit clone() *
Pfeil 9.1.5 Hashwerte über hashCode() liefern *
Pfeil 9.1.6 System.identityHashCode(…) und das Problem der nicht eindeutigen Objektverweise *
Pfeil 9.1.7 Aufräumen mit finalize() *
Pfeil 9.1.8 Synchronisation *
Pfeil 9.2 Die Utility-Klasse java.util.Objects
Pfeil 9.3 Vergleichen von Objekten
Pfeil 9.3.1 Natürlich geordnet oder nicht?
Pfeil 9.3.2 Die Schnittstelle Comparable
Pfeil 9.3.3 Die Schnittstelle Comparator
Pfeil 9.3.4 Rückgabewerte kodieren die Ordnung
Pfeil 9.3.5 Statische und Default-Methoden in Comparator
Pfeil 9.4 Wrapper-Klassen und Autoboxing
Pfeil 9.4.1 Wrapper-Objekte erzeugen
Pfeil 9.4.2 Konvertierungen in eine String-Repräsentation
Pfeil 9.4.3 Von einer String-Repräsentation parsen
Pfeil 9.4.4 Die Basisklasse Number für numerische Wrapper-Objekte
Pfeil 9.4.5 Vergleiche durchführen mit compare(…), compareTo(…), equals(…) und Hashwerten
Pfeil 9.4.6 Statische Reduzierungsmethoden in Wrapper-Klassen
Pfeil 9.4.7 Die Größe eines primitiven Typs in den Wrapper-Konstanten SIZE und BYTES
Pfeil 9.4.8 Behandeln von vorzeichenlosen Zahlen *
Pfeil 9.4.9 Die Klasse Integer
Pfeil 9.4.10 Die Klassen Double und Float für Fließkommazahlen
Pfeil 9.4.11 Die Long-Klasse
Pfeil 9.4.12 Die Boolean-Klasse
Pfeil 9.4.13 Autoboxing: Boxing und Unboxing
Pfeil 9.5 Iterator, Iterable *
Pfeil 9.5.1 Die Schnittstelle Iterator
Pfeil 9.5.2 Wer den Iterator liefert
Pfeil 9.5.3 Die Schnittstelle Iterable
Pfeil 9.5.4 Erweitertes for und Iterable
Pfeil 9.5.5 Interne Iteration
Pfeil 9.5.6 Einen eigenen Iterable implementieren *
Pfeil 9.6 Die Spezial-Oberklasse Enum
Pfeil 9.6.1 Methoden auf Enum-Objekten
Pfeil 9.6.2 Aufzählungen mit eigenen Methoden und Initialisierern *
Pfeil 9.6.3 enum mit eigenen Konstruktoren *
Pfeil 9.7 Zum Weiterlesen
 

Zum Seitenanfang

9.2Die Utility-Klasse java.util.Objects Zur vorigen ÜberschriftZur nächsten Überschrift

Die Klasse Objects hält einige statische Utility-Funktionen bereit. Sie führen in erster Linie null-Tests durch, um eine spätere NullPointerException beim Aufruf von Objektmethoden zu vermeiden.

Eingebaute null-Tests für equals(…)/hashCode()

Ist zum Beispiel eine Objektvariable name einer Person null, so kann nicht einfach name.hashCode() aufgerufen werden, ohne dass eine NullPointerException folgt. Drei Methoden von Objects führen null-Tests durch, bevor sie an die Object-Methode equals(…)/hashCode()/toString() weiterleiten. Eine zusätzliche Hilfsmethode arbeitet mit Comparatoren, die wir im nächsten Abschnitt kennenlernen werden.

class java.util.Objects
  • static boolean equals(Object a, Object b)

    Liefert true, wenn beide Argumente entweder null sind oder a.equals(b) ebenfalls true ergibt, andernfalls liefert es false. Dass 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 int hash(Object... values)

    Ruft hashCode() auf jedem Objekt der Sammlung values auf und verbindet es zu einem neuen Hashwert. Die Implementierung ist einfach ein return Arrays.hashCode(values).

  • static <T> int compare(T a, T b, Comparator<? super T> 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 das Ergebnis vom Comparator und von der Reihenfolge der Parameter ab.

[zB]Beispiel

Erinnern wir uns an die überschriebene Methode hashCode() vom Spieler, bei der der Spielername in den Hashwert eingehen soll:

Listing 9.19com/tutego/insel/object/hashcode/Player.java, hashCode(), Ausschnitt

result = 31 * result + ((name == null) ? 0 : name.hashCode());

Mit Objects.hashCode(Object) kann der null-Test entfallen, da er schon in der statischen Methode vorgenommen wird:

result = 31 * result + Objects.hashCode( name );

Objects.toString(…)

Eine weitere statische Methode ist Objects.toString(Object). Sie ist aus Symmetriegründen in der Klasse, da toString() zu den Standardmethoden der Klasse Object zählt. Genutzt werden muss die Methode nicht, da es mit String.valueOf(…) schon eine entsprechende Methode gibt.

class java.util.Objects
  • static String toString(Object o)

    Liefert den String »null«, wenn das Argument null ist, sonst o.toString().

[»]Hinweis

Die Methode String.valueOf(…) ist überladen und ist somit insbesondere für primitive Argumente viel besser geeignet als Objects.toString(Object), bei der immer erst Wrapper-Objekte aufgebaut werden müssen. Zwar sehen String.valueOf(3.14) und Objects.toString( 3.14) gleich aus, aber im zweiten Fall kommt ein Wrapper-Double-Objekt mit ins Spiel.

null-Prüfungen mit eingebauter Ausnahmebehandlung

Bei den vorangehenden Methoden wird null als Sonderfall behandelt, und Ausnahmen werden vermieden. So sind etwa Objects.toString(null) oder Objects.hashCode(null) in Ordnung, und es wird um null »herumgearbeitet«. Das ist nicht immer sinnvoll, denn traditionell gilt es, null als Argument und in den Rückgaben zu vermeiden. Es ist daher gut, als Erstes in einem Methodenrumpf zu testen, ob die Argumente ungleich null sind – es sei denn, das ist unbedingt gewünscht.

Für diese Tests, dass Referenzen ungleich null sind, bietet Objects ein paar requireNonNull(…)-Methoden, die null-Prüfungen übernehmen und im Fehlerfall eine NullPointerException auslösen. Diese Tests sind praktisch bei Konstruktoren oder Settern, die Werte initialisieren sollen, aber verhindern möchten, dass null durchgeleitet wird.

[zB]Beispiel

Die Methode setName(…) soll kein name-Argument gleich null erlauben:

public void setName( String name ) {

this.name = Objects.requireNonNull( name );

}

Alternativ ist eine Fehlermeldung möglich:

public void setName( String name ) {

this.name = Objects.requireNonNull( name, "Name darf nicht null sein!" );

}
class java.util.Objects
  • static <T> T requireNonNull(T obj)

    Löst eine NullPointerException aus, wenn obj gleich null ist. Sonst liefert sie obj als Rückgabe. Die Deklaration ist generisch und so zu verstehen, dass der Parametertyp gleich dem Rückgabetyp ist.

  • static <T> T requireNonNull(T obj, String message)

    Wie requireNonNull(obj), nur dass die Meldung der NullPointerException bestimmt wird.

  • static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)

    Wie requireNonNull(obj, message), nur kommt die Meldung aus dem messageSupplier. Das ist praktisch für Nachrichten, deren Aufbau teurer ist, denn der Supplier schiebt die Kosten für die Erstellung des Strings so lange hinaus, bis es wirklich zu einer NullPointerException kommt, denn erst dann ist die Meldung nötig.

Tests auf null

Hinter isNull(Object o) und nonNull(Object o) verbirgt sich ein einfacher Test auf o == null bzw. o != null.

class java.util.Objects
  • static boolean isNull(Object obj)

  • static boolean nonNull(Object obj)

    Liefert true, wenn obj gleich null bzw. nicht null ist, sonst false.

Im normalen Programmcode werden Entwickler diese Methoden nicht nutzen, doch sind sie praktisch für Methodenreferenzen, sodass es dann zum Beispiel heißen kann: stream.filter(Objects::nonNull) usw. Darauf kommen wir in den folgenden Kapiteln noch einmal zu sprechen.

 


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
 Zum Katalog
Zum Katalog: Java ist auch eine Insel Java ist auch eine Insel

Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?

Ihre Meinung



 Buchempfehlungen
Zum Katalog: Java ist auch eine Insel

Java ist auch eine Insel




Zum Katalog: Java SE 9-Standard-Bibliothek

Java SE 9-Standard-Bibliothek




Zum Katalog: Professionell entwickeln mit Java EE 8

Professionell entwickeln mit Java EE 8




Zum Katalog: Entwurfsmuster

Entwurfsmuster




Zum Katalog: IT-Projektmanagement

IT-Projektmanagement




 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2017

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de