groovyのカテゴリ

カテゴリとはObjective-Cで実装されていた機能で、クラスのメソッドの定義を複数のファイルに分けたり、カテゴリ単位で実行時にメソッドを読み込むことで既存のクラスを拡張することができるというもの。
groovyにおいても、クラス自体には直接触らずに、クラスに便利なメソッドを追加するというような使い方ができる。
まずはカテゴリクラスを用意。

public class StringCategory{
  static String uhyo(String arg){
    arg + "uhyo"
  }
  static String addStr(String tgt,String arg){
    tgt + arg
  }
}

staticメソッドで追加したいメソッドを定義する。第一引数は拡張したいクラスのインスタンスとし、このインスタンスに対して操作を行う。第二引数以降は追加するメソッドの引数となる。
以下が、上記で定義したカテゴリの使い方の例。

def str = "aaa"
use(StringCategory){
  println str.uhyo()
  println str.addStr("hoge")
}

利用したいカテゴリをuseのパラメータに指定することで、useブロック内でcategoryで定義したメソッドが利用できるようになる。
useのパラメータにカテゴリの配列を渡すことで、複数のカテゴリを同時に利用できるようになる。

use([StringCategory,StringCategory2]){
  println str.uhyo()
  println str.hoge()
}