Groovy 1.6では、カテゴリ/ミックスインを使用するためのはるかに単純なメカニズムが導入されました。以前は、カテゴリクラスのメソッドを静的に宣言する必要があり、最初のパラメータは、(Foo
上記のクラスのように)適用できるオブジェクトのクラスを示していました。
カテゴリのメソッドがターゲットクラスに「ミックスイン」されると、それらは非静的ですが、カテゴリクラスでは静的であるため、これはやや厄介です。
とにかく、Groovy 1.6以降、代わりにこれを行うことができます
// 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()
他のいくつかの機能が利用可能です。カテゴリを適用できるクラスを制限する場合は、@Category
アノテーションを使用します。たとえば、(またはそのサブクラスに)のみ適用する場合は、次MyCategory
のMyClass
ように定義します。
@Category(MyClass)
class MyCategory {
// Implementation omitted
}
@Mixin
(上記のように)を使用してコンパイル時にカテゴリを混合する代わりに、次を使用して実行時にカテゴリを混合することができます。
MyClass.mixin MyCategory
Grailsを使用している場合、Bootstrap.groovy
これを行う可能性のある場所です。