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 Die Klassenbibliothek
14 Einführung in die nebenläufige Programmierung
15 Einführung in Datenstrukturen und Algorithmen
16 Einführung in grafische Oberflächen
17 Einführung in Dateien und Datenströme
18 Einführung ins Datenbankmanagement mit JDBC
19 Einführung in <XML>
20 Testen mit JUnit
21 Bits und Bytes und Mathematisches
22 Die Werkzeuge des JDK
A Java SE Paketübersicht
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 20,0 MB
- Übungsaufgaben, ca. 1,8 MB
- Musterlösungen, ca. 0,8 MB

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenbloom
Das umfassende Handbuch
Buch: Java ist auch eine Insel

Java ist auch eine Insel
Rheinwerk Computing
1306 Seiten, gebunden, 11. Auflage
49,90 Euro, ISBN 978-3-8362-2873-2
Pfeil 9 Besondere Typen der Java SE
Pfeil 9.1 Vergleichen von Objekten
Pfeil 9.1.1 Natürlich geordnet oder nicht?
Pfeil 9.1.2 Die Schnittstelle Comparable
Pfeil 9.1.3 Die Schnittstelle Comparator
Pfeil 9.1.4 Rückgabewerte kodieren die Ordnung
Pfeil 9.1.5 Statische und Default-Methoden in Comparator
Pfeil 9.2 Wrapper-Klassen und Autoboxing
Pfeil 9.2.1 Wrapper-Objekte erzeugen
Pfeil 9.2.2 Konvertierungen in eine String-Repräsentation
Pfeil 9.2.3 Von einer String-Repräsentation parsen
Pfeil 9.2.4 Die Basisklasse Number für numerische Wrapper-Objekte
Pfeil 9.2.5 Vergleiche durchführen mit compare(…), compareTo(…), equals(…) und Hashwerten
Pfeil 9.2.6 Statische Reduzierungsmethoden in Wrapper-Klassen
Pfeil 9.2.7 Die Größe eines primitiven Typs in den Wrapper-Konstanten SIZE und BYTES
Pfeil 9.2.8 Behandeln von vorzeichenlosen Zahlen *
Pfeil 9.2.9 Die Klasse Integer
Pfeil 9.2.10 Die Klassen Double und Float für Fließkommazahlen
Pfeil 9.2.11 Die Long-Klasse
Pfeil 9.2.12 Die Boolean-Klasse
Pfeil 9.2.13 Autoboxing: Boxing und Unboxing
Pfeil 9.3 Object ist die Mutter aller Klassen
Pfeil 9.3.1 Klassenobjekte
Pfeil 9.3.2 Objektidentifikation mit toString()
Pfeil 9.3.3 Objektgleichheit mit equals(…) und Identität
Pfeil 9.3.4 Klonen eines Objekts mit clone() *
Pfeil 9.3.5 Hashwerte über hashCode() liefern *
Pfeil 9.3.6 System.identityHashCode(…) und das Problem der nicht eindeutigen Objektverweise *
Pfeil 9.3.7 Aufräumen mit finalize() *
Pfeil 9.3.8 Synchronisation *
Pfeil 9.4 Die Utility-Klasse java.util.Objects
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 (seit Java 8)
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 *
Pfeil 9.6.3 enum mit eigenen Konstruktoren *
Pfeil 9.7 Zum Weiterlesen
 
Zum Seitenanfang

9.4Die 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.

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 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.29com/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 n 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. Neu in Java 8.

Tests auf null

Zwei neue Methoden in Java 8 bei der Klasse Objects sind isNull(Object o) und nonNull(Object o), wohinter sich ein einfacher Test auf o == null bzw. o != null verbirgt.

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 SE 8 Standard-Bibliothek
Java SE 8 Standard-Bibliothek


Zum Katalog: Professionell entwickeln mit Java EE 7
Professionell entwickeln mit Java EE 7


Zum Katalog: Schrödinger programmiert Java
Schrödinger programmiert Java


Zum Katalog: Einführung in Java
Einführung in Java


Zum Katalog: Programmieren lernen mit Java
Programmieren lernen mit Java


Zum Katalog: Apps entwickeln für Android 5
Apps entwickeln für Android 5


Zum Katalog: Apps entwickeln mit Android Studio
Apps entwickeln mit Android Studio


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2016
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.

 
Nutzungsbestimmungen | Datenschutz | Impressum

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