I have several categories that I use in my Grails plugin. e.g.,
class Foo {
static foo(ClassA a,Object someArg) { ... }
static bar(ClassB b,Object... someArgs) { ... }
}
I’m looking for the best way to add these methods to the meta-classes so that I don’t have to use the category classes and can just invoke them as instance methods. e.g.,
aInstance.foo(someArg)
bInstance.bar(someArgs)
Is there a Groovy/Grails class or method that will help me do this or am I stuck iterating through the methods and adding them all myself?
In Groovy 1.6 a much simpler mechanism for using categories/mixins was introduced. Previously the methods of a category class had to be declared static, and the first parameter indicates which class of objects they could be applied to (as in your
Fooclass above).I find this somewhat awkward because once the methods of the category are “mixed in” to the target class they are non-static, but in the category class they are static.
Anyway, since Groovy 1.6 you can do this instead
A few other features are available. If you want to restrict the classes that the category can be applied to, use the
@Categoryannotation. For example, if you only want to applyMyCategorytoMyClass(or it’s subclasses), define it as:Instead of mixing the categories in at compile-time using
@Mixin(as above), you can mix them in at runtime instead using:In you’re using Grails,
Bootstrap.groovyis a place where you might do this.