Kotlin

Kotlin のパターンマッチを使ったメソッドで型パラメータをいい感じに扱って欲しい

Kotlin で

sealed class Query<T>
object StringQuery : Query<String>()
object IntQuery : Query<Int>()

みたいなシールドクラスがあったとして、

fun <T> executeQuery(query: Query<T>): T = when (query) {
  is StringQuery -> "何か文字列"
  is IntQuery -> 1000
}

という感じで型に応じた返り値を返したいのだけど、上のようなコードを書くと 「Type Mismatch. Required: T / Found: String」 みたいな感じでコンパイラに怒られる。

こういう感じのことをするいい方法ってないものだろうか…… :thinking: