Napotkałem problem meta-programowania Groovy, którego nie mogę rozwiązać.Groovy meta-programowanie - dodawanie metod statycznych do Object.metaClass
Dodając statycznej metody foo() do klasy foobar, a następnie FooBar.foo() działa zgodnie z oczekiwaniami:
FooBar.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
Jednak zamiast dodać taką samą statycznej metody foo() do obiektu klasy , a następnie FooBar.foo() kończy się niepowodzeniem z wyjątkiem MissingMethodException:
Object.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
// groovy.lang.MissingMethodException:
// No signature of method: FooBar.foo() is applicable for argument types:
//() values: []
Dlaczego tak jest? Czy nie powinno się dodawać foo() również do FooBar?
Hi! Sądząc po dokumentach, powinna to być poprawna odpowiedź, ale wyjątek jest nadal generowany, nawet gdy ExpandoMetaClass.enableGlobally() jest uruchamiane na początku skryptu Groovy. Czy byłeś w stanie wprowadzić statyczną metodę do obiektu i udostępnić ją do rozszerzania obiektów? – knorv