質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1143閲覧

Kotlinのsealed classで共通のResultクラスみたいなものを作りたい

noob_at

総合スコア4

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2022/01/17 10:05

あるAPIサーバへのリクエストの結果をseald classで以下のように表現しています。

Kotlin

1sealed class ArticleResult { 2 data class Ok(val article: Article) : ArticleResult() 3 data class Error(val message: String) : ArticleResult() 4}

現状はこのResultクラスをエンドポイントごとに用意しています。

Kotlin

1// /api/article 用 2sealed class ArticleResult { 3 data class Ok(val article: Article) : ArticleResult() 4 data class Error(val message: String) : ArticleResult() 5} 6 7// /api/category 用 8sealed class CategoryResult { 9 data class Ok(val category: Category) : CategoryResult() 10 data class Error(val message: String) : CategoryResult() 11} 12 13// /api/user 用 14sealed class UserResult { 15 data class Ok(val user: User) : UserResult() 16 data class Error(val message: String) : UserResult() 17}

ある程度形が同じなので共通の概念を持たせて、それを継承させるようにしたいのですが、どうすればうまくできますでしょうか?

共通の概念としては

  • OkクラスとErrorクラスのみ持つ

共通でない概念としては

  • Okクラスの中身はそれぞれ異なる

といった感じです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/result.md
すでにResult型があります。いろいろ制限がありましたが、kotlin1.5以降はないので特に困ることはないと思います。
バージョンの問題等で使えないのであれば下のような定義だけでも十分目的は達成できると思います。

kotlin

1sealed interface Result<out T> { 2 data class Success<out T>(val value: T): Result<T> 3 data class Error(val message: String): Result<Nothing> 4}

型パラメーターの分散については、こうする必要はないですが通常の用途であればこうしたほうが便利なはずです。

投稿2022/01/17 12:42

yudedako67

総合スコア2047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noob_at

2022/01/18 00:24

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問