Wie können Sie eine Methode für eine Java-Instanz mit Groovy-Metaprogrammierung überschreiben?

Ich versuche, die Funktionalität einer Methode einer Java-Instanz in meinem Groovy-Code zu überschreiben, aber ich erhalte eine Classcast-Ausnahme.

Ich sah in der Anleitung geschriebenHie aber ich kann es nicht zum Laufen bringen.

Da mein eigentliches Problem ein bisschen durcheinander ist, ist unten ein ausführbarer Beispielcode aufgeführt, der mit demselben Fehler fehlschlägt. Im Beispiel möchte ich die Teilzeichenfolgemethode einer Instanz der Klasse java.lang.String überschreiben. In Wirklichkeit möchte ich eine Methode einer Instanz einer Klasse überschreiben, die keine entsprechende Groovy-Implementierung hat. Die Antwort auf mein Beispiel lautet also nicht, einfach eine Groovy-String-Instanz zu verwenden.

class example {
    static void main(args) {
        java.lang.String hey = new java.lang.String("hey")
        ExpandoMetaClass emc = new ExpandoMetaClass( java.lang.String, false )
            emc.substring = {
                       "This is not a very good substring implementation"
                }
            emc.initialize()

        def proxiedHey = new groovy.util.Proxy().wrap(hey)
        proxiedHey.setMetaClass(emc)
        printf proxiedHey.toString()
        printf proxiedHey.substring(1)
    }
}

Das obige Beispiel schlägt in Zeile 12 fehl, d. H. Printf meh.toString (). Die ausgelöste Ausnahme ist

Caught: java.lang.ClassCastException: groovy.util.Proxy kann bei example.main (test.groovy: 12) nicht in java.lang.CharSequence umgewandelt werden.

Also, irgendwelche Ideen, was ich falsch mache oder ob es eine andere Möglichkeit gibt, mein Problem des Hinzufügens und / oder Überschreibens von Methoden einer Java-Instanz zu lösen?

Ich verwende Groovy Version 1.7.4.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage