Я заметил странное поведение с Groovy MetaClass, и мне интересно, может ли кто-нибудь дать мне понять, что здесь происходит.groovy invokeMethod добавить метод в metaclass потребности, если утверждение?
Это прекрасно работает:
@Override
Object invokeMethod(String name, Object args) {
if(true) {
println("Should only see this once")
def impl = { Object theArgs -> println("Firing WeirdAction") }
getMetaClass()."$name" = impl
return impl(args)
}
}
Однако, если я снимаю, если заявление он бросает MissingPropertyException:
@Override
Object invokeMethod(String name, Object args) {
println("Should only see this once")
def impl = { Object theArgs -> println("Firing WeirdAction") }
getMetaClass()."$name" = impl
return impl(args)
}
Вот мой класс конкретизации и называть, класс пусто выше, за исключением определение метода.
IfTester sut = new IfTester()
sut.WeirdAction()
У кого-нибудь есть идея, что я не понимаю здесь?
Запустив ваш пример и заметив разные обратные вызовы между вызовом класса и вызовом экземпляра, я снова нашел googled и нашел аналогичный поток https://stackoverflow.com/questions/34449587/groovy-this-metaclass-versus-instance- метакласса. Мне странно, что сфера действия меняет вызов от экземпляра к классу, но, возможно, я не полностью его понимаю. – gt124