@Mixinの例が変だぞ
http://groovy.codehaus.org/Category+and+Mixin+transformations
とか
http://www.infoq.com/articles/groovy-1-6
にある@Mixin/@Categoryの例が変に思われる。
@Category(Vehicle) class FlyingAbility { def fly() { "I'm the ${name} and I fly!" } } @Category(Vehicle) class DivingAbility { def dive() { "I'm the ${name} and I dive!" } }
とあるけど、ここでの@Categoryは無くても動く。
@Categoryはインスタンスメソッドをstaticメソッドに転換する働きを持ちます。useとかでつかう形式のためにね。DGMの形式にする。
しかし、@Mixinは、インスタンスメソッドをそのまま取り込む働きがあるので、static化は不要なはず。逆に、@Categoryで展開された静的メソッドをmixinでとりこんだときどうなるかには疑問があるね。呼べるには呼べるようだけど、その呼び出す際の動きには奇妙なところがあるなあ*1。
とゆーことで、@Mixinと@Categoryは別目的のものであり、ペアで扱っちゃいけないのだ。本来なら。
ちなみに@Mixinアノテーションをつけることはクラスの静的イニシャライザでmixin()メソッドを呼ぶのと同じです。@Grabアノテーションをつけることがgrab()メソッドが裏方さんで呼ばれるのと同じですね。