J'ai rencontré un problème de méta-programmation Groovy que je suis incapable de résoudre.Méta-programmation groovy - ajouter des méthodes statiques à Object.metaClass
Lorsque vous ajoutez la méthode statique foo() à la classe FooBar, puis FooBar.foo() fonctionne comme prévu:
FooBar.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
Cependant, ajouter au lieu de la même méthode statique foo() à la classe Object , puis FooBar.foo() échoue avec un MissingMethodException:
Object.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
// groovy.lang.MissingMethodException:
// No signature of method: FooBar.foo() is applicable for argument types:
//() values: []
Pourquoi? Ne devrait pas Object.metaClass.static.foo = { .. }
ajouter foo() aussi à FooBar?
Salut! A en juger par les docs, cela devrait être la bonne réponse, mais l'exception est toujours lancée même lorsque ExpandoMetaClass.enableGlobally() est exécuté au début du script Groovy. Avez-vous été capable d'injecter une méthode statique dans Object et de l'utiliser pour étendre des objets? – knorv