honesome
@honesome (honesome)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

KotlinのNullable Typeの変換について

質問したいこと

kotlinのNull許容型についてお聞きしたいです。
下記3つのdata classがあった時に、

data.kt
data class A (
 val foo: String,
 val bar: String
)

data class B (
 val foo: String,
 val bar: String
)

data class C (
 val foo: String?,
 val bar: String?
)

A?からB?に変換するにはどうやってやればよいでしょうか?
クラスCのように各フィールドに対してNullableとするのではなく、
クラス型そのものをNullableにしたいと思っております。

class SomeClass() {

  fun someMethod(){
     val a: A? = someRepository.find()
     val b: B? = someExchange(a)
     val c: C  = C(a?.foo, a?.bar)
  }

}
0

2Answer

Comments

  1. @honesome

    Questioner

    回答誠にありがとうございます。

    質問したかった内容はAがNullの場合にB?に変換する(もしくはB?としてnewする)方法です。

    紛らわしくて申し訳ございません。

  2. `B?`が取りうるのは`B`の値か`null`です。つまり、`B`をnewするか`null`を返すかになります。
  3. @honesome

    Questioner

    最初のコメントで@woxtuさんが言いたかったことは
    @out-gardenさんのソースにある

    fun A?.toB(): B? {
    if (this == null) {
    return null
    }
    return B(foo=this.foo, bar=this.bar)
    }

    のことですよね。今、理解できました。ありがとうございました。
data class A (
 val foo: String,
 val bar: String
)

data class B (
 val foo: String,
 val bar: String
)

data class C (
 val foo: String?,
 val bar: String?
)

fun A?.toB(): B? {
  if (this == null) {
    return null
  }
  return B(foo=this.foo, bar=this.bar)
}

fun main(args: Array<String>) {
  var a: A? = A("foo", "bar")
  var b: B? = a.toB()
  println("$b")
  a = null
  b = a.toB()
  println("$b")
}

これで動きました

1Like

Comments

  1. @honesome

    Questioner

    ありがとうございます。

Your answer might help someone💌