0Pricing
Kotlin Academy · レッスン

リフレクションの基礎

実行時に型を調べます

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

リフレクションとは

リフレクションとは、実行時にプログラム自身の構造(クラス、プロパティ、関数、アノテーションなど)を調べたり操作したりする機能です。

Kotlinのリフレクションはkotlin.reflectパッケージにあり、KClassを中心に構成されています。

KClassの取得

型またはインスタンスに::class構文を使うと、そのKClassオブジェクトを取得できます。

class Robot

fun main() {
    val fromType = Robot::class
    val fromInstance = Robot()::class
    println(fromType.simpleName)
    println(fromInstance.simpleName)
}

クラスの名前

KClassはsimpleNameとqualifiedNameを公開します。修飾名にはパッケージのパスが含まれます。

class Engine

fun main() {
    val k = Engine::class
    println(k.simpleName)
    println(k.qualifiedName)
}

プロパティの調査

memberPropertiesはクラスのプロパティを一覧表示します。それぞれがKPropertyであり、そのnameを取得できます。

import kotlin.reflect.full.memberProperties

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

fun main() {
    for (p in Point::class.memberProperties) {
        println(p.name)
    }
}

プロパティ値の読み取り

KProperty1はインスタンスを渡して呼び出すことで、get(instance)を通じて値を読み取れます。

import kotlin.reflect.full.memberProperties

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

fun main() {
    val p = Point(3, 4)
    for (prop in Point::class.memberProperties) {
        println(prop.name + " = " + prop.get(p))
    }
}

関数の調査

memberFunctionsは、クラスの呼び出し可能な関数をKFunctionオブジェクトとして返します。それぞれの関数のnameを読み取れます。

import kotlin.reflect.full.memberFunctions

class Calculator {
    fun add(a: Int, b: Int) = a + b
    fun negate(a: Int) = -a
}

fun main() {
    Calculator::class.memberFunctions
        .filter { it.name in listOf("add", "negate") }
        .forEach { println(it.name) }
}

関数参照

::name構文は、KFunction型の呼び出し可能参照を生成します。後でinvokeを使って呼び出したり、値として渡したりできます。

fun double(n: Int) = n * 2

fun main() {
    val ref = ::double
    println(ref.name)
    println(ref.invoke(21))
}

インスタンスの生成

createInstance()は、クラスに引数なしのコンストラクターがある場合に、リフレクションでオブジェクトを生成します。

import kotlin.reflect.full.createInstance

class Widget {
    override fun toString() = "Widget"
}

fun main() {
    val w = Widget::class.createInstance()
    println(w)
}

コンストラクターの調査

constructorsはクラスのコンストラクターを一覧表示します。そのparametersを調べると、どのような引数を受け取るかが分かります。

class Person(val name: String, val age: Int)

fun main() {
    val ctor = Person::class.constructors.first()
    ctor.parameters.forEach { println(it.name) }
}

コストと注意点

リフレクションは強力ですが、次の点に注意が必要です。

  • 直接呼び出すより低速です
  • コンパイル時の安全性を迂回します
  • JVMではkotlin-reflectライブラリが必要です

リフレクションはフレームワークやツールに使い、頻繁に実行するループでは使わないでください。

リフレクションのツールボックス

覚えておきたい主な型は次のとおりです。

  • KClass — クラス
  • KProperty — プロパティ
  • KFunction — 関数
  • KParameter — パラメーター

これらを組み合わせると、構造を動的に読み取れます。

クイックチェック

リフレクションの基本について理解度を確認しましょう。

振り返り

リフレクションの基本を学びました。

  • ::classによるKClassの取得
  • memberPropertiesとmemberFunctionsの一覧表示
  • プロパティ値の読み取りと関数参照の呼び出し
  • createInstance()によるオブジェクトの生成

次は、アノテーションを動的に読み取ります。

よくある質問

「リフレクションの基礎」レッスンは無料ですか?

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

「リフレクションの基礎」で何を学びますか?

実行時に型を調べます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「リフレクションの基礎」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. アノテーションの使用
  2. アノテーションの定義
  3. リフレクションの基礎
  4. 実践的なリフレクション
← Kotlin Academyに戻る