Kotlinでstaticメソッドが定義できるようになったのでJAX-RSリベンジ

ことりん〜(挨拶)

これは Kotlin Advent Calendar 2014 の14日目です。

夏の終わりに 関西Kotlin勉強会 を開催し、私はKotlinでJAX-RSをやるという発表をしました。 JAX-RSにいくつかあるリクエストパラメータの受け取りかたのうち 「Stringの引数をひとつだけ受け取る”valueOf”という名前のstaticファクトリメソッドを持つクラス」 が実現できませんでした。 そのときのKotlinのバージョン(M7)ではstaticメソッドが定義できなかったからです。

しかしバージョンM9からplatformStaticアノテーションを使用してstaticメソッドを定義できるようになったようです。

というわけでリベンジしました。 次のような感じで書けます。

package app

import kotlin.platform.platformStatic

public class ValueObj private (val value: String) {
  class object {
    platformStatic fun valueOf(value: String) = ValueObj(value)
  }
}

Kotlinの思想がどうあれJava言語、または既存のJavaライブラリとの共存を考慮するとstaticメソッドの 定義は必要だろうなーと思っていたのでこの機能追加は良いと思います。

個人的にはstaticファクトリメソッドを持つバリューオブジェクトを多用するので大変助かります。

おしまい。

今日のコード