2018年11月10日土曜日

sealed class に共通データを持たせるときは abstract val にする

sealed class Pet を継承した data class Cat と Dog があるとします。 sealed class Pet data class Cat(val name: String, val kind: CatKind) : Pet() data class Dog(val name: String, val kind: DogKind) : Pet() name プロパティは Pet として必須なので Pet class に持たせたいですね。
しかし次のように primary コンストラクタの property paramter として持たせようとするとコンパイルエラーになります。 sealed class Pet(val name: String) data class Cat(name: String, val kind: CatKind) : Pet(name) // コンパイルエラー data class Dog(name: String, val kind: DogKind) : Pet(name) // コンパイルエラー data class の primary コンストラクタは property parameter (val or var) しか持てないからです。 そこで、どうするかというと name を abstract val として Pet に持たせます。 sealed class Pet { abstract val name: String } data class Cat(override val name: String, val kind: CatKind) : Pet() data class Dog(override val name: String, val kind: DogKind) : Pet()


2 件のコメント:

  1. Great post man thanks for sharing this useful information but I was i serach for Jailbreak download finally i found one original and working PS3 Jailbreak & PS4 Jailbreak Games PKG for free follow the link to read more.



    f you are looking for an PS4 Jailbreak then your search is over now as we are giving you a chance to jailbreak your PS4,Visit PS4 Jailbreak download

    返信削除
  2. This is an amazing post you have shared with us . I appreciate it and keep continue sharing .
    clipping path service

    返信削除