0Pricing
Kotlin Academy · レッスン

Kotlin Reflection:KClass、KFunction、KProperty

KClassを使ってクラスメタデータを扱い、リフレクションでメンバーを調べます。

「Kotlin Reflection:KClass、KFunction、KProperty」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

リフレクションとは

リフレクションを使うと、コードは実行時に自身の構造(クラス、関数、プロパティ、アノテーション、コンストラクタ)を調べて呼び出せます。KotlinはJVMのリフレクションAPIを、kotlin.reflectパッケージにある独自の、より豊富な型でラップしています。

KClassを取得する

型またはインスタンスに対して::classを使用すると、KClass参照を取得できます。

val klass: KClass<String> = String::class
val instance: KClass<out Any> = "hello"::class
println(klass.simpleName)  // "String"

KClassのプロパティ

KClassはクラスに関するメタデータを公開します。

val klass = String::class
println(klass.simpleName)        // "String"
println(klass.qualifiedName)     // "kotlin.String"
println(klass.isAbstract)        // false
println(klass.constructors.size) // number of constructors

KFunction:呼び出し可能参照

::functionNameを使用すると、KFunction参照を取得できます。そのパラメータを調べたり、関数を呼び出したりできます。

fun greet(name: String) = "Hello, $name!"

val fn: KFunction<String> = ::greet
println(fn.name)           // "greet"
println(fn.call("Kotlin")) // "Hello, Kotlin!"

パラメータを調べる

KFunction.parametersは、名前、型、オプション性を持つKParameterオブジェクトのリストを返します。

fun add(a: Int, b: Int) = a + b

::add.parameters.forEach {
    println("${it.name}: ${it.type}")
}
// a: kotlin.Int
// b: kotlin.Int

KProperty:プロパティ参照

プロパティ参照は、プロパティを第一級オブジェクトとして扱えるようにします。KProperty0はレシーバーのないプロパティに使用し、KProperty1<T, R>はメンバープロパティに使用します。

data class User(val name: String, val age: Int)

val prop: KProperty1<User, String> = User::name
val user = User("Alice", 30)
println(prop.get(user))  // "Alice"

KMutablePropertyによる可変プロパティ

varプロパティの場合、参照はset関数も持つKMutableProperty1になります。

class Box(var value: Int)

val prop: KMutableProperty1<Box, Int> = Box::value
val box = Box(10)
prop.set(box, 42)
println(box.value)  // 42

すべてのメンバーを一覧表示する

KClass.membersは、参照可能なすべてのメンバー(関数とプロパティ)を返します。KClass.declaredMemberPropertiesは、そのクラスで宣言されたプロパティだけを返します。

data class Point(val x: Int, val y: Int)

Point::class.declaredMemberProperties.forEach {
    println(it.name)  // "x", "y"
}

KClassでインスタンスを生成する

KClass.createInstance()を呼び出すと(引数なしのコンストラクタが必要です)、またはKClass.constructorsを使うと、生成方法を細かく制御できます。

class Counter {
    var count = 0
}
val c = Counter::class.createInstance()
c.count = 5
println(c.count)  // 5

Kotlinリフレクションの依存関係

Kotlinリフレクションにはkotlin-reflectアーティファクトが必要です(stdlibには含まれていません)。ビルドに追加してください。

// build.gradle.kts
implementation("org.jetbrains.kotlin:kotlin-reflect")

パフォーマンスに関する注意

リフレクションは直接コードを実行する場合より大幅に低速です。KClass、KFunction、KPropertyの参照は起動時にキャッシュしてください。頻繁に実行されるループ内で呼び出すことは避けてください。ほとんどのツールやフレームワークのコードでは、このコストは許容できます。

クイックチェック

メンバープロパティへの参照を表し、インスタンスからその値を読み取れるKotlinの型はどれですか?

まとめ:Kotlinリフレクション

主な型:

  • KClass — クラスのメタデータ、コンストラクタ、メンバー
  • KFunction — 呼び出し可能参照、パラメータ、呼び出し
  • KProperty1/KMutableProperty1 — プロパティ参照、get/set
  • クラスパスにkotlin-reflectが必要
  • 参照をキャッシュし、頻繁に実行される処理では使用を避ける

よくある質問

「Kotlin Reflection:KClass、KFunction、KProperty」レッスンは無料ですか?

はい。「Kotlin Reflection:KClass、KFunction、KProperty」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「Kotlin Reflection:KClass、KFunction、KProperty」で何を学びますか?

KClassを使ってクラスメタデータを扱い、リフレクションでメンバーを調べます。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Kotlin Reflection:KClass、KFunction、KProperty」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Kotlin Reflection:KClass、KFunction、KProperty
  2. カスタムアノテーションの作成と対象指定
  3. 実行時にアノテーションを読み取る
  4. リフレクションベースのバリデーションとマッピング
← Kotlin Academyに戻る