Android-Entwicklung mit Groovy

Seite 2: Groovy Development Kit

Inhaltsverzeichnis

Groovy erweitert Java-Klassen um weitere Methoden. So wird zum Beispiel java.lang.Object wie oben erwähnt mit der Methode .println ergänzt, die intern System.out.println aufruft. Derartige Erweiterungen sind Teile des Groovy Development Kit (GDK) und auf der Webseite der Sprache dokumentiert.

So wird etwa mit

new File('/my/file').text 

der Inhalt einer Datei als String zurückgegeben. Besonders erwähnenswert sind die Erweiterungen für die Collections-API. Ein paar Beispiele:

assert [1,2,3].join(', ') == "1, 2, 3"
assert [1,2,3].reverse() == [3,2,1]
assert [3,1,2].sort { a,b -> a <=> b } == [1,2,3]
assert [1,2,3].findAll { it % 2 } == [1,3]
assert [1,2,3].collect { it * 2 } == [2,4,6]
[1,2,3].each { println it } // Ausgabe 123
assert [1,2] + [3,4] == [1,2,3,4]
assert [1,1,2,3] - 1 == [2,3]
[a:1, b:2, c:3].each {key, value -> print "$key=$value "}
// Ausgabe: a=1 b=2 c=3
// [a:1] ist ein Literal für eine Map

Mit Extension Modules lassen sich vergleichsweise einfach eigene Erweiterungen erstellen.

JsonBuilder und MarkupBuilder sind hilfreich beim Erstellen von JSON- beziehungsweise XML-Code. Ein Beispiel zur XML-Erzeugung:

def xml = new groovy.xml.MarkupBuilder()
xml.persons {
person(id:1) {
firstname("John")
lastname("Smith")
}
person(id:2) {
firstname("Duke")
lastname("Ellington")
}
}

<persons>
<person id='1'>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>
<person id='2'>
<firstname>Duke</firstname>
<lastname>Ellington</lastname>
</person>
</persons>
</persons>

JsonBuilder arbeitet entsprechend, ihm kann man allerdings auch eine Datenstruktur zur Serialisierung übergeben.

Die Tools JsonSlurper und XmlSlurper lesen JSON-beziehungsweise XML-Code in ein DOM-Modell ein. Letzteres lässt sich einfach traversieren:

def xml = """\
def xml = """\
<persons>
<person id='1'>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>
<person id='2'>
<firstname>Duke</firstname>
<lastname>Ellington</lastname>
</person>
</persons>"""
def data = new XmlSlurper().parseText(xml)
println data.person.find{ it.@id == 2 }.lastname // Ausgabe: Ellington
println data.person.collect {
"Person[${it.@id}]: $it.firstname $it.lastname"
}
// Ausgabe: [Person[1]: John Smith, Person[2]: Duke Ellington]