読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

GroovyのmetaClassとCompileStatic

Groovyではクラスに動的にメソッドを追加できます。
コード例を見るのが早いです。こちらの記事がわかりやすいです。npnl.hatenablog.jp

JavaScriptに似てますね。

ドメインモデルにビジネスロジックを実装していくと長年の様々な機能拡張の結果かなりクラスが肥大化してしまいました。そこでうまく分割するようなクラス設計ができないかと思っていました。Commandパターンのようなやり方もあります。しかし値クラスと処理に分離する感じになるのでいまいちしっくりきていません。

Swiftだとextensionという書き方ができます。クラスを定義するソースと別に追加メソッドを記述できるので適切にグループ分けして整理できそうです。コード例はこちらがわかりやすいです。blog.codable.co.jp

そこでGroovyだとどうなのかと調べたところmetaClassを経由してできることがわかりました。

この場合Eclipseで自動補完は多分できないだろうと思い確認してみることにしました。ところがそれ以前の問題でした。@CompileStatic、@TypeCheckedともにコンパイルエラーになりました。もちろんエラー無視して実行しても実行時エラーです。型チェックと同時にはできないようでした。