2012年9月22日土曜日

GroovyのInheritConstructorsアノテーション

クラスにInheritConstructorsアノテーションを付加すると、親クラスが実装しているコンストラクタをコンパイル時に追加してくれます。

Fugaは、引数を2つうけるコンストラクタを持っていないが「InheritConstructors」を設定しているので、親クラスのHogeが実装しているコンストラクタが追加されていることがわかる。

import groovy.transform.InheritConstructors

class Hoge {

  def hoge1
  def hoge2

  Hoge(hoge1, hoge2) {
    println "Hoge.Hoge"
    this.hoge1 = hoge1
    this.hoge2 = hoge2
  }

  @Override
  public String toString() {
    return "Hoge{" +
            "hoge1=" + hoge1 +
            ", hoge2=" + hoge2 +
            '}';
  }
}

@InheritConstructors
class Fuga extends Hoge {
}

def fuga = new Fuga("hoge1", "hoge2")
println "fuga = ${fuga}"