O'Reilly logo

Groovy: Grundlagen und fortgeschrittene Techniken by Joachim Baumann

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

317
8 Erweiterungen der
Java-Bibliotheken
In diesem Kapitel werden wir diejenigen Erweiterungen der Java-
Bibliotheken kennenlernen, denen wir im Laufe der vergangenen
Kapitel noch nicht begegnet sind.
Sie sollten zumindest Kapitel 4 gelesen haben, um problemlos fol-
gen zu können.
8.1 Einführung
Viele der Erweiterungen, die Groovy für Java-Objekte implementiert,
sind uns schon begegnet. Hierzu gehören zum Beispiel Erweiterungen
von
java.lang.Object oder die Iterationsmethoden, die Groovy allen
Collection-Typen hinzufügt.
Es gibt aber noch einige Erweiterungen, die wir nicht gestreift
haben. Hierzu gehören weitere für die Basisklasse
java.lang.Object,
die dann natürlich allen Objekten zur Verfügung stehen, aber auch
Erweiterungen für Dateioperationen, für den Umgang mit Prozessen
oder Netzwerkoperationen. Diesen werden wir uns jetzt widmen.
8.2 Erweiterungen für alle Objekte
Die meisten der Erweiterungen für Objekte haben wir schon kennen-
gelernt. Auch einige Funktionalitäten, die wir bisher der Sprache selbst
zugeordnet haben, sind über Erweiterungen für Objekte realisiert. Ein
Beispiel hierfür ist die Methode
use(), die als Parameter mehrere durch
Komma getrennte Klassen und eine Closure akzeptiert. Diese haben
wir bisher kennengelernt als Schlüsselwort, das ein Category aktiviert.
Aber ein paar kleinere Erweiterungen haben wir bisher ausgelas-
sen. Diese werden wir uns jetzt näher ansehen.
8 Erweiterungen der Java-Bibliotheken318
8.2.1 Ausgabe von Texten
Gleich zu Beginn des Buches, im ersten Beispiel eines Groovy-Pro-
grammes, sind wir bereits der Methode
println() begegnet, die uns
seither begleitet. Auch die Methode
print() war eine logische Erweite-
rung. Wenn wir mit Java 1.4 arbeiten müssen, dann sind dies die nor-
malen Ausgabemöglichkeiten, die uns zur Verfügung stehen.
Java 1.5 bietet aber zusätzlich die Methode
printf() für
java.io.PrintWriter an, die es erlaubt, mit einer C-ähnlichen Format-
zeichenkette die Ausgabe zu steuern. Im Vergleich zur in C implemen-
tierten
printf()-Funktion bietet die Java-Version zusätzlich die Mög-
lichkeit, Formatierungen sprachspezifisch durchzuführen und
natürlich die Unterstützung der Java-Datentypen. Die detaillierte
Dokumentation finden Sie in der Dokumentation zu
java.util.Format-
ter
. Dies lohnt durchaus einen Blick, da sich die meisten Formatie-
rungsprobleme mit
printf() lösen lassen.
In Groovy ist der Bedarf für diese Art der Ausgabe nicht so groß
wie in Java, da wir die Möglichkeit haben, Formatierung weitgehend
über
GStrings durchzuführen.
Trotzdem kann
printf() für komplexere Formatierungsaufgaben
sehr vorteilhaft eingesetzt werden. Deshalb bietet Groovy diese
Methode analog zu
println() für den Typ Object an. Wie bei println()
wird das PrintWriter-Objekt verwendet, das in System.out referenziert
wird.
Nicht immer wollen wir eine derart formatierte Zeichenkette
direkt ausgeben. Für diesen Zweck steht die Methode
sprintf() bereit,
die eine formatierte Zeichenkette zurückgibt. Ansonsten ist die Funkti-
onalität von
sprintf() exakt gleich zu der von printf().
Beispiel
In unserem Beispiel (Listing 8–1) definieren wir eine Liste von
Werten
vals, über die wir im nächsten Schritt mit der Methode each()
iterieren. Wir geben in der zugehörigen Closure jeden Wert mit
printf() aus . Innerhalb der Formatzeichenkette steht dabei %d für
eine Dezimalzahl und
%n für das Einfügen einer neuen Zeile. Durch die
Verwendung der Zeichenfolge
%3d bestimmen wir dabei, dass die aus-
zugebende Dezimalzahl mindestens drei Stellen haben soll. Nicht exis-
tierende Stellen werden dabei mit Leerzeichen aufgefüllt.
Listing 8–1
Verwendung von printf()
und sprintf()
package de.groovybuch.kap8
vals = [5, 42, 101]
vals.each { value ->
printf '%3d%n', value
}
3198.2 Erweiterungen für alle Objekte
printf '%3$d %2$d %1$d%n', vals
date = [95, 4, 23] as Date
printf '%1$te.%1$tm.%1$tY', date
Ausgabe
5
42
101
101 42 5
23.05.1995
Dann geben wir die Werte der Liste in der falschen Reihenfolge aus .
Hierfür verwenden wir den Argumentindex
%<n>$, der angibt, welches
der auf die Formatzeichenkette folgenden Argumente aktuell verwen-
det werden soll.
Zum Schluss verwenden wir die Unterstützung für den Typ
Date,
um ein Datum auszugeben, das wir vorher definiert haben
. Auch
hier müssen wir den Argumentindex verwenden, da wir uns mehrfach
auf das gleiche Argument beziehen.
8.2.2 Ausgabe von Objektinformation
Wir kennen aus Jahren der Programmierung die Möglichkeit, durch
die Methode
toString() eine Ausgabe von Objektinformationen zu
erhalten. Diese sehr häufig bei der Entwicklung verwendete Möglich-
keit, einen ersten Einblick in den Zustand eines Objektes zu erhalten,
ist in vielen Fällen alles andere als aufschlussreich.
Groovy stellt aus diesem Grund zwei weitere Methoden für jedes
Objekt zur Verfügung, die bei der Entwicklung unterstützen. Die
Methode
dump() generiert eine detaillierte Ausgabe des Objekts inklu-
sive Klasse und aller Attribute. Mit dieser Ausgabe kennen wir den
gesamten Zustand eines Objektes.
Die zweite Methode, die Groovy uns zur Verfügung stellt, ist die
Methode
inspect(). Beim Aufruf für eine der speziell unterstützten
Typen wie Listen, Bereiche, Zeichenketten etc. wird eine Ausgabe
erzeugt, die direkt für die Neuerzeugung der Objekte verwendet wer-
den kann. Bei allen nicht speziell unterstützten Objekten wird der Auf-
ruf weitergereicht an die Methode
toString().
Beispiel
Im Beispiel (Listing 8–2) definieren wir zuerst eine Klasse Person
mit zwei privaten Attributen vorname und nachname. Dann erzeugen wir
ein neues Objekt dieser Klasse und geben es mit
dump() aus. In der Aus-
gabe taucht der vollständige Zustand des Objektes inklusive der Attri-
bute auf.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required