Expando: | Ein Expando-Objekt hat keinen festgelegten Zustand, sondern wir können ihm dynamisch einen geben.
Expando expando = new Expando() expando.name = "Testname" expando.streetname = "Teststreet 1a" println expando.properties
([name:Testname, streetname:Teststreet 1a])
MetaClass:
Integer.metaClass.add = {delegate=delegate+it} println 3.add(5)
(8)
Integer.metaClass.add = {delegate=delegate-it} println 3.add(5)
(-2)
Hier ein Beispiel für eine neue Operator-Methode, welche eine beliebige Anzahl an Argumenten addiert. Dazu besitzt die Closure ein Argument vom Typ VarArg.
Integer.metaClass.addVarArg = {... args -> def total = 0 args.each { total += it } delegate + total } println 1.addVarArg(2,3,4,5,6,7,8)
(36)
grep:
Integer.metaClass.grep = {list -> "${[1,2,3,4,5,6,7,8,9].grep(delegate)}"} println 4.grep([1,2,3,4,5,6,7,8,9])
([4])
Integer.metaClass.grep = {list -> "${[1,2,3,4,5,6,7,8,9].grep(delegate)}"} println 10.grep([1,2,3,4,5,6,7,8,9])
([])
toString():
Neue toString() - Methode für List-Objekte, welche zusätzlich zum Wert auch den Index mit ausgibt:
List.metaClass.toString2 = { def result = "[" delegate.eachWithIndex {value,index -> result += index result += ":" result += value result += ", " } if(delegate.size > 0) { result = result.trim() result = result.substring(0, result.length() - 1) } result += "]" } println [1,2,3,4,5,6,7,8,9].toString2()
([0:1, 1:2, 2:3, 3:4, 4:5, 5:6, 6:7, 7:8, 8:9])