アノテーション

Kotlinの「アノテーション(Annotations)」は、クラス・関数・プロパティ・式などにメタデータを付加するための仕組みです。アノテーションを使うことで、Kotlinコードに情報を付加し、コンパイラ、リフレクション、ライブラリなどに特定の動作を指示することができます。Javaのアノテーションと互換性があるため、KotlinでもJavaで定義されたアノテーションを使用できます。


1. 基本的な使い方

Kotlinでアノテーションを使用するには、@記号を使ってアノテーションを対象に付加します。

kotlin
@Deprecated("この関数は非推奨です。新しいAPIを使用してください。") fun oldFunction() { // 処理内容 }

この例では、oldFunction@Deprecatedアノテーションを付けて、使用を避けるように促しています。


2. アノテーションの定義方法

Kotlinでは、独自のアノテーション(カスタムアノテーション)を定義することも可能です。

kotlin
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class MyAnnotation(val info: String)
  • @Target: アノテーションを付与できる要素(クラス、関数など)を指定します。

  • @Retention: アノテーションの保持期間を指定します。

    • SOURCE: コンパイル時のみ存在。

    • BINARY: バイトコードには存在するが、リフレクションからは見えない。

    • RUNTIME: 実行時にリフレクションで取得可能。

使用例:

kotlin
@MyAnnotation("サンプル情報") fun annotatedFunction() { // 処理内容 }

3. よく使われるアノテーション

アノテーション 説明
@Deprecated 古いAPIに対して警告を表示
@JvmStatic コンパニオンオブジェクト内の関数をJavaからstaticとして呼び出し可能に
@JvmOverloads デフォルト引数を使ったオーバーロードメソッドを自動生成
@JvmField フィールドをJavaから直接アクセス可能に
@Throws Javaの例外宣言と互換にする

4. アノテーションとリフレクション

アノテーションはリフレクションと組み合わせることで、実行時にメタデータを取得して動的な処理を行うことが可能です。

kotlin
fun main() { val function = ::annotatedFunction val annotation = function.annotations.find { it is MyAnnotation } as? MyAnnotation println(annotation?.info) // サンプル情報 }

5. KotlinとJavaのアノテーション相互運用

KotlinはJavaのアノテーションをそのまま使用可能です。たとえば、JUnitやSpring FrameworkのアノテーションはKotlinでも使用されます。

kotlin
@Test fun testSomething() { // テスト内容 }

まとめ

Kotlinのアノテーションは、コードに追加情報を与えることで、開発効率や可読性を高めたり、特定の動作をコンパイラやランタイムに伝えたりする手段です。独自のアノテーションを定義することで、フレームワークやメタプログラミング的な拡張も可能になります。

生成日:2025/05/04