初めに
今回は、sealed classについて書いていきます。
sealed class
簡単にいうと全然違うdataの型でもひとまとまりで持っておけるクラスです。
例えばですが、一つのRecyclerViewで二種類のデータの型を表示したい時などに非常に役立つ機能です。
書き方は、以下の通りです。
sealed class Example {
data class hoge(
val sample: Sample
) : Example()
data class huga(
val something: Something
) : Example()
}
SampleとSomethingが全く別のDataClassでもひとまとまりに管理をすることができるのでRecyclerViewに対してExampleクラスを渡すようにすればあとは中身を見て判断するように実装すればいいだけです。
もし、片方は何もデータを保持したくないのであればobjectで宣言をすれば問題ありません。
また、Data構造自体は全く同じだけどViewに反映する時に区別をしたい時などがあると思います。
そんな時は下記の書き方をすることで簡単に区別することができるので非常に便利です。
sealed class Example {
abstract val sample: Sample
abstract val something: Something
data class hoge (
override val sample: Sample,
override val something: Somthing
) : Example()
data class huga (
override val sample: Sample,
override val something: Somthing
) : Example()
}
最後に
今回は最近改めて使いやすさと便利さを痛感したsealed classを紹介させていただきました。
自分はAPI通信でよく使ってましたが、それ以外でもいろんな場面で活躍してくれると思うので、是非皆さんも触ってみてください。