Kotlinにおける**リフレクション(Reflection)**とは、プログラムの実行時に型、プロパティ、メソッドなどのメタ情報にアクセスしたり操作したりする仕組みのことです。Javaと同様に、Kotlinでもリフレクション機能を使うことで柔軟な動的処理が可能になりますが、Kotlin独自のリフレクションAPI(kotlin.reflectパッケージ)も提供されています。
1. 基本概念
リフレクションの用途
-
実行時にクラスの型情報を取得したいとき
-
プロパティや関数に動的にアクセス・操作したいとき
-
アノテーションを読み取るとき
-
シリアライズや依存性注入などのフレームワーク構築時
2. 主なKotlinリフレクションAPI
KClass
KClassKotlinのクラスの型情報を表します。JavaでいうClassに相当。
KProperty
KPropertyプロパティに関するメタ情報を取得できます。
KFunction
KFunction関数やメソッドに関する情報を取得・呼び出しできます。
3. Javaリフレクションとの連携
KotlinはJVM上で動作するため、java.lang.Classやjava.lang.reflectのAPIも利用可能です。ただし、Kotlinらしい表現をしたい場合はkotlin.reflectを使う方が自然です。
4. kotlin-reflect ライブラリ
Kotlinの高度なリフレクション機能(例:KProperty, KFunctionなど)を使うには、標準ライブラリとは別に kotlin-reflect を明示的に依存に追加する必要があります。
Gradleの例:
5. リフレクションの注意点
-
パフォーマンス低下:リフレクションは動的に情報を取得するため、静的コードに比べて実行コストが高い。
-
安全性の低下:コンパイル時に型チェックが効かないため、実行時エラーが発生しやすい。
-
モジュール間の依存:Kotlin/NativeやKotlin/JSではリフレクション機能が限定されるため、マルチプラットフォームでは注意が必要。
6. まとめ
| 要素 | 説明 |
|---|---|
KClass |
クラスのメタ情報 |
KProperty |
プロパティへのリフレクションアクセス |
KFunction |
関数・メソッドの呼び出し |
| Java互換 | java.lang.Classなども利用可能 |
| 注意点 | パフォーマンスや安全性に留意が必要 |
生成日:2025/05/04