Как переопределить метод для экземпляра 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.