Ho riscontrato un problema di meta-programmazione di Groovy che non riesco a risolvere.Meta-programmazione Groovy - aggiunta di metodi statici a Object.metaClass
Quando si aggiunge il metodo foo statico() alla classe FooBar, quindi FooBar.foo() funziona come previsto:
FooBar.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
Tuttavia, io invece aggiungo lo stesso metodo foo statico() per la classe Object , poi FooBar.foo() non riesce con 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: []
Perché? Non dovresti Object.metaClass.static.foo = { .. }
aggiungere foo() anche a FooBar?
Hi! A giudicare dai documenti, questa dovrebbe essere la risposta corretta, ma l'eccezione viene comunque lanciata anche quando ExpandoMetaClass.enableGlobally() viene eseguito all'inizio dello script Groovy. Sei stato in grado di iniettare un metodo statico su Object e averlo a disposizione per estendere gli oggetti? – knorv