自作のKotlin Object
to Kotlin Object
マッパー、KMapper
の機能紹介です。
バージョンはKMapper 0.15
で書いています。
プロパティにエイリアスを貼る
KMapper
ではゲッターやパラメータにマッピング時にのみ使う名前(= エイリアス)を付けることができます。
この機能により、ソースとマップ先で名前が異なるフィールドへのマッピングや、バッキングプロパティを用いて初期化1を行うことができます。
ゲッターにエイリアスを貼る
KGetterAlias
アノテーションをゲッターに振ることで、ソースのプロパティ名にエイリアスを貼ることができます。
以下の例では、Src
とDst
でそれぞれプロパティ名が異なりますが、エイリアスによってマッピングを行うことができます。
data class Src(@get:KGetterAlias("barArg") val fooArg: String)
data class Dst(val barArg: String)
val src: Src = /* 生成処理 */
val dst: Dst = KMapper(::Dst).map(src)
パラメータにエイリアスを貼る
KParameterAlias
アノテーションをパラメータに振ることで、マップ時の引数にエイリアスを貼ることができます。
以下の例では、バッキングプロパティ_fooArg
に引数を受け、それを用いて外部向けに公開するfooArg
を初期化しています。
data class Src(val fooArg: String)
data class Dst(@param:KParameterAlias("fooArg") private val _fooArg: String) {
val fooArg = /* _fooArgを用いた初期化処理 */
}
val src: Src = /* 生成処理 */
val dst: Dst = KMapper(::Dst).map(src)
プロパティ名変換との関係
KMapper
ではプロパティ名の変換機能を提供していますが、パラメータにエイリアスを貼った場合、エイリアスもプロパティ名変換の影響を受けます。
以下の例では、エイリアスはキャメルケースで書き、変換関数によってスネークケースの引数と一致を取っています。
data class Src(val foo_arg: String)
data class Dst(@param:KParameterAlias("fooArg") private val _fooArg: String) {
val fooArg = /* _fooArgを用いた初期化処理 */
}
val src: Src = /* 生成処理 */
val dst: Dst = KMapper(::Dst) { /* camel -> snake */ }.map(sc)
参考にさせて頂いた記事
-
機能としては提供していますが、基本的にはファクトリーメソッドを利用する方が効率的です。 ↩