0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Kotlin】reifiedとは?型を“見える化”する魔法のキーワード!

Posted at

reified の意義と背景

Kotlinのreified(リイファイド)は、インライン関数(inline)とセットで使うことで、ジェネリクスの型情報を実行時に扱えるようにする機能です。

通常、Kotlin(Java)のジェネリクスは「型消去(type erasure)」により、実行時には型情報が失われます。しかし、reifiedを使えばこの制約を回避し、T::classthis is T のようなコードが書けるようになります。

基本構文

inline fun <reified T> doSomething() {
    println(T::class)
}
  • inline:関数の中身を呼び出し元に埋め込む。

  • reified T:型Tを実行時に取得可能にする。

使用例

例1:クラス型を取得する

inline fun <reified T> printClassName() {
    println(T::class.java.name)
}

fun main() {
    printClassName<String>() // → java.lang.String
}

例2:型判定(is

inline fun <reified T> Any.isTypeOf(): Boolean {
    return this is T
}

fun main() {
    val value: Any = "Hello"
    println(value.isTypeOf<String>()) // → true
    println(value.isTypeOf<Int>())    // → false
}

例3:Gsonを使った汎用デシリアライズ(TypeToken不要)

inline fun <reified T> Gson.fromJson(json: String): T {
    return this.fromJson(json, T::class.java)
}

注意点

制約項目 内容
inline が必須 reifiedinline 関数内でしか使えません
通常関数では使えない inline関数では T::classthis is T はNG
クラスには使えない class Foo<reified T> のようにクラスの型には使えません

reified を使わない場合との比較(TypeTokenとの違い)

// 使わない場合
val listType = object : TypeToken<List<String>>() {}.type
gson.fromJson<List<String>>(json, listType)

// reified を使った場合
inline fun <reified T> Gson.fromJson(json: String): T = fromJson(json, T::class.java)

よくある用途

  • RetrofitやKtorでのTypeToken不要なJSONパース
  • T::class.javaなど型情報の取得
  • 型による分岐(when (T::class)など)
  • 型安全な JSON パースやデシリアライズ

まとめ

特徴 説明
inline 関数を呼び出し元に埋め込む
reified 型Tを実行時に取得可能にする
主な用途 型チェック、型取得、リフレクションの簡略化

reified を使いこなせるようになると、型に関する処理がグッと柔軟に、安全に書けるようになります。Gson や Retrofit、Ktor などのライブラリとも相性抜群です。

おまけ:reifiedの語源

  • 「reify = 具象化する、具体化する」という意味の英単語
  • コンパイル時の型を実行時に「具体化」して使えるということ
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?