すわりんのブログ

androidとかサブカルとかのブログです

kotlinのMapよる委譲に可能性を見出した

Storing Properties in a Map

Delegated Properties - Kotlin Programming Language

クラスのプロパティをMap<String,*>により取得する記述方法。

//定義:各プロパティの値をmapから取得している
class User(val map: Map<String, Any?>) {
    val name: String by map
    val age: Int     by map
}

//生成方法
val user = User(mapOf(
    "name" to "John Doe",
    "age"  to 25
))

また仮説段階だけどAPIからの値をマッピングするのに役に立つかもかもしれない。

以下のJSONから同一のプロパティを持つUserクラスを生成したい場合

{
      "name": "taro",
      "age": 28,
      "country":"jp"
 }

これをMapにマッピング、そしてUserクラスを生成する事ができる。 Jsonマッピングがだいぶシンプルになりそう。 GsonとかMoshiとかいらんかったんや

懸念点は

  • Jsonのキーがスネークケースだとプロパティもスネークケースになる。
  • MapのKeyとプロパティが一致しない場合nullになりそう
  • Jsonがネストの場合どうなる?

どこで試してみよう

[所要時間:15分]