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ファクトリメソッドを持つバリューオブジェクトを多用するので大変助かります。
おしまい。
今日のコード
- https://github.com/backpaper0/sandbox の kotlin-staticmethod-example ディレクトリ