Groovy‎ > ‎

Meta- Programmierung


Die Magie von Groovy

Ein Grossteil der Magie von Groovy ist hier versteckt.
Mit der Meta- Programmierung kann man Objekte erweitern, bestehende Methoden erweitern und umleiten und virtuelle Eigenschaften erzeugen.

Das Schlüsselwort delegate bezeichnet im folgenden immer die Instanz der Klasse.

Eigenschaften

Nehmen wir das Beispiel der Maps
In Groovy ist folgendes möglich: 

def myMap = [a:"Hallo",b:"Groovy",c:"Welt"]
def hallo= myMap["a"]
def welt= myMap.c

Normalerweise hat eine Map keine Eigenschaft "c", diese lässt sich aber virtuell erzeugen.

class Map{
    ....
    def propertyMissing(String name) { delegate[name] }
    ....
}

Methoden

Man kann auch Methoden einfach hinzufügen

Map.metaClass.keysize = {-> delegate.keySet().size() }

oder umleiten

class MyMath{
    def miracle(){42}
}
MyMath math = new MyMath()
Integer.metaClass.hashCode=math.&miracle
assert 42==12.hashCode()

Comments