Как переопределить метод для экземпляра java-типа с помощью метапрограммирования Groovy?

Я пытаюсь переопределить функциональность метода экземпляра java-типа в моем коде Groovy, но получаю исключение classcast.

Я посмотрел на руководство опубликованоВот но я не могу заставить его работать.

Поскольку моя настоящая проблема - немного путаницы, ниже приведен пример запускаемого кода, который завершается с той же ошибкой. В этом примере я хочу переопределить метод substring экземпляра класса java.lang.String. В действительности я хочу переопределить метод экземпляра класса, который не имеет соответствующей реализации Groovy, поэтому ответом на мой пример является не просто использование экземпляра строки Groovy.

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)
    }
}

Вышеприведенный пример завершается с ошибкой в ​​строке 12, то есть printf meh.toString (). Исключение составляет

Пойман: java.lang.ClassCastException: groovy.util.Proxy не может быть приведен к java.lang.CharSequence в example.main (test.groovy: 12)

Итак, есть идеи о том, что я делаю неправильно, или есть ли другой способ решить мою проблему добавления и / или переопределения методов экземпляра типа Java?

Я использую Groovy версии 1.7.4.

Ответы на вопрос(2)

Ваш ответ на вопрос