Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit 3e98b8b

Browse files
committed
KParameterFlatten周りの追記
1 parent f30d5ae commit 3e98b8b

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

README.ja.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,74 @@ data class Dst(
377377
)
378378
```
379379

380+
#### 複数引数からの変換
381+
以下のような`Dst`で、`InnerDst`をマップ元の複数のフィールドから変換したい場合、`KParameterFlatten`アノテーションが利用できます。
382+
383+
```kotlin
384+
data class InnerDst(val fooFoo: Int, val barBar: String)
385+
data class Dst(val bazBaz: InnerDst, val quxQux: LocalDateTime)
386+
```
387+
388+
`Dst`のフィールド名をプレフィックスに指定する場合以下のように付与します。
389+
ここで、`KParameterFlatten`を指定されたクラスは、前述の`KConstructor`アノテーションで指定した関数またはプライマリコンストラクタから初期化されます。
390+
391+
```kotlin
392+
data class InnerDst(val fooFoo: Int, val barBar: String)
393+
data class Dst(
394+
@KParameterFlatten
395+
val bazBaz: InnerDst,
396+
val quxQux: LocalDateTime
397+
)
398+
data class Src(val bazBazFooBoo: Int, val bazBazBarBar: String, val quxQux: LocalDateTime)
399+
400+
// bazBazFooFoo, bazBazBarBar, quxQuxの3引数が要求される
401+
val mapper = KMapper(::Dst)
402+
```
403+
404+
##### KParameterFlattenアノテーションのオプション
405+
`KParameterFlatten`アノテーションはネストしたクラスの引数名の扱いについて2つのオプションを持ちます。
406+
407+
###### fieldNameToPrefix
408+
`KParameterFlatten`アノテーションはデフォルトでは引数名をプレフィックスに置いた名前で一致を見ようとします。
409+
引数名をプレフィックスに付けたくない場合は`fieldNameToPrefix`オプションに`false`を指定します。
410+
411+
```kotlin
412+
data class InnerDst(val fooFoo: Int, val barBar: String)
413+
data class Dst(
414+
@KParameterFlatten(fieldNameToPrefix = false)
415+
val bazBaz: InnerDst,
416+
val quxQux: LocalDateTime
417+
)
418+
419+
// fooFoo, barBar, quxQuxの3引数が要求される
420+
val mapper = KMapper(::Dst)
421+
```
422+
423+
`fieldNameToPrefix = false`を指定した場合、`nameJoiner`オプションは無視されます。
424+
425+
###### nameJoiner
426+
`nameJoiner`は引数名と引数名の結合方法の指定です。
427+
例えば`Src``snake_case`だった場合、以下のように利用します。
428+
429+
```kotlin
430+
data class InnerDst(val fooFoo: Int, val barBar: String)
431+
data class Dst(
432+
@KParameterFlatten(nameJoiner = NameJoiner.Snake::class)
433+
val bazBaz: InnerDst,
434+
val quxQux: LocalDateTime
435+
)
436+
437+
// baz_baz_foo_foo, baz_baz_bar_bar, qux_quxの3引数が要求される
438+
val mapper = KMapper(::Dst) { /* キャメル -> スネークの命名変換関数 */ }
439+
```
440+
441+
デフォルトでは`camelCase`が指定されており、`snake_case``kebab-case`のサポートも有ります。
442+
`NameJoiner`クラスを継承した`object`を作成することで自作することもできます。
443+
444+
##### 他の変換方法との併用
445+
`KParameterFlatten`アノテーションを付与した場合も、これまでに紹介した変換方法は全て機能します。
446+
また、`KParameterFlatten`アノテーションは何重にネストした中でも利用が可能です。
447+
380448
### マッピング時に用いる引数名・フィールド名の設定
381449
`KMapper`は、デフォルトでは引数名に対応する名前のフィールドをソースからそのまま探します。
382450
一方、引数名とソースで違う名前を用いたいという場合も有ります。

0 commit comments

Comments
 (0)