Dans Groovy 1.6, un mécanisme beaucoup plus simple d'utilisation des catégories/mixins a été introduit. Auparavant, les méthodes d'une classe de catégorie devaient être déclarées statiques et le premier paramètre indiquait la classe d'objets à laquelle elles pouvaient être appliquées (comme dans votre classe Foo
ci-dessus). Je trouve cela quelque peu gênant car une fois que les méthodes de la catégorie sont "mélangées" à la classe cible, elles ne sont pas statiques, mais dans la catégorie elles sont statiques.
Quoi qu'il en soit, depuis Groovy 1.6 vous pouvez le faire à la place
// Define the category
class MyCategory {
void doIt() {
println "done"
}
void doIt2() {
println "done2"
}
}
// Mix the category into the target class
@Mixin (MyCategory)
class MyClass {
void callMixin() {
doIt()
}
}
// Test that it works
def obj = new MyClass()
obj.callMixin()
Quelques autres fonctionnalités sont disponibles. Si vous souhaitez limiter les classes auxquelles la catégorie peut être appliquée, utilisez l'annotation @Category
. Par exemple, si vous ne souhaitez appliquer MyCategory
à MyClass
(ou il est sous-classes), définissez comme:
@Category(MyClass)
class MyCategory {
// Implementation omitted
}
Au lieu de mélanger les catégories à la compilation en utilisant @Mixin
(comme ci-dessus), vous pouvez les mélanger à l'exécution en utilisant à la place:
MyClass.mixin MyCategory
en vous utilisez Grails, Bootstrap.groovy
est un endroit où vous pourriez le faire.