Wie mache ich Metaklassenänderungen rückgängig, nachdem ich GroovyShell ausgeführt habe?

8

Wenn ich zum Beispiel ein Groovy-Skript ausführe, das die Meta-Klasse String ändert, füge eine Methode foo () hinzu

%Vor%

Wenn ich danach eine neue Shell erzeuge und sie ausführe, sind die Änderungen immer noch da

%Vor%

Gibt es eine Möglichkeit, alle Metaklassenänderungen nach dem Ausführen der GroovyShell rückgängig zu machen? Ich habe es versucht

%Vor%

und

%Vor%

aber das hat sich nicht geändert.

    
cretzel 23.10.2009, 10:25
quelle

3 Antworten

11

Sie können

verwenden %Vor%

, um alle an der Meta-Klasse String vorgenommenen Änderungen rückgängig zu machen.

Alternativ könnten Sie nur die Meta-Klasse einer bestimmten String-Instanz ändern, daher wären nicht alle Instanzen von String betroffen.

    
Christoph Metzendorf 28.10.2009, 09:53
quelle
2

Sie können auch MetaClassRegistryCleaner verwenden.

Bevor Sie Änderungen an Metaklassen vornehmen, können Sie

tun %Vor%

Wenn Sie die Metaklasse zurücksetzen möchten, müssen Sie sie in den vorherigen Zustand versetzen.

Sie können

tun %Vor%

Auf diese Weise können Sie alle während der Dauer vorgenommenen Metaklassenänderungen zurücksetzen.

    
Sudhir N 12.02.2016 14:22
quelle
0

Mir ist klar, dass dies eine etwas ältere Frage ist, aber es ist das erste Ergebnis bei Google, als ich genau das gleiche Problem suchte.

Die Lösung, die ich wählte, war, groovy in einen neuen Classloader zu packen (mit plexus-classworlds). Wenn das Script fertig ist, wird der Classloader entsorgt (und alle Änderungen an der Metaklasse werden ebenfalls entfernt).

    
user340535 14.03.2012 21:16
quelle

Tags und Links