Groovy > 便利なアノテーション

更新日 2019-07-28
広告

ToString

クラス定義の際に、ToStringアノテーションを追加すると、自動的にtoStringメソッドをオーバーライドしてくれます。単純なtoStringメソッドでよければ、アノテーションを宣言するだけで済みます。
import groovy.transform.ToString
 
@ToString(includeNames=true)
class HogeClass {
  :
  :
}

上の例では、includeNameパラメータにtrueを設定しています。こうすると、クラスのプロパティもtoStringメソッドにより出力してくれます。

@ToStringアノテーションを、相互参照関係にあるクラスで使うと、toStringメソッドがループして、StackOverFlowが発生する場合があります。 例えば、以下のような実装をすると発生します。

import groovy.transform.ToString
 
@ToString(includeNames=true)
class Foo {
  Bar bar
}

@ToString(includeNames=true)
class Bar {
  Foo foo
}
FooクラスとBarクラスで、お互いを参照しています。 この状況でToStringアノテーションを使うと、StackOverFlow例外が発生します。 これを回避するためには、どちらかのクラスで、ToStringの対象から除外するための excludes 宣言をする必要があります。
import groovy.transform.ToString
 
@ToString(includeNames=true)
class Foo {
  Bar bar
}

@ToString(includeNames=true, excludes="foo")
class Bar {
  Foo foo
}
こうすると、Barクラスのほうでは、変数fooを、ToStringの対象から除外します。 これでループを回避できます。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system