0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【KMapper】プロパティにエイリアスを貼る

Posted at

自作のKotlin Object to Kotlin Objectマッパー、KMapperの機能紹介です。

バージョンはKMapper 0.15で書いています。

プロパティにエイリアスを貼る

KMapperではゲッターやパラメータにマッピング時にのみ使う名前(= エイリアス)を付けることができます。
この機能により、ソースとマップ先で名前が異なるフィールドへのマッピングや、バッキングプロパティを用いて初期化1を行うことができます。

ゲッターにエイリアスを貼る

KGetterAliasアノテーションをゲッターに振ることで、ソースのプロパティ名にエイリアスを貼ることができます。
以下の例では、SrcDstでそれぞれプロパティ名が異なりますが、エイリアスによってマッピングを行うことができます。

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)

参考にさせて頂いた記事

  1. 機能としては提供していますが、基本的にはファクトリーメソッドを利用する方が効率的です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?