Çözemediğim bir Groovy meta programlama problemiyle karşılaştım.Groovy meta-programming - Object.metaClass için statik yöntemler eklemek
sınıf filanca statik yöntem foo() eklerken, ardından FooBar.foo() beklendiği gibi çalışır:
FooBar.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
Ancak, bunun yerine sınıf Nesne aynı statik yöntem foo() ekleyin ardından FooBar.foo() bir MissingMethodException başarısız:
Object.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
// groovy.lang.MissingMethodException:
// No signature of method: FooBar.foo() is applicable for argument types:
//() values: []
Bunun nedeni nedir? Object.metaClass.static.foo = { .. }
, FooBar'a foo() da eklememeli mi? Eğer ExpandoMetaClass.enableGlobally çağırmanız gerekir kullanarak, istediğiniz davranışı elde etmek için
Hi! Dokümanlar üzerinden bakıldığında bu doğru cevap olmalı, ancak ExpandoMetaClass.enableGlobally() Groovy komut dosyasının başlangıcında çalıştırıldığında bile istisna hala atılır. Nesne için statik bir yöntem enjekte edebildiniz mi ve nesneleri genişletmek için kullanılabilir mi? – knorv