0Pricing
Kotlin Academy · レッスン

アノテーションの定義

カスタムアノテーションを作成します

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

アノテーションの宣言

annotation classキーワードでアノテーションを定義します。最も単純なアノテーションはデータを持たず、マーカーとして機能します。

annotation class Beta

@Beta
fun newFeature() = "experimental"

fun main() {
    println(newFeature())
}

アノテーションのパラメーター

アノテーションはコンストラクターのパラメーターを通じてデータを保持できます。ただし、使用できる型は限られており、プリミティブ型、String、列挙型、他のアノテーション、KClass、およびそれらの配列に限られます。

annotation class ApiVersion(val value: Int)

@ApiVersion(2)
fun endpoint() = "v2"

fun main() {
    println(endpoint())
}

@Target

@Targetは、アノテーションを適用できる場所を制限します。CLASS、FUNCTION、PROPERTYなどのAnnotationTarget値を1つ以上指定します。

@Target(AnnotationTarget.FUNCTION)
annotation class Loggable

@Loggable
fun process() = "processing"

fun main() {
    println(process())
}

@Retention

@Retentionは、アノテーションがどのくらいの期間保持されるかを制御します。

  • SOURCE — コンパイラーによって破棄されます
  • BINARY — クラスファイルに保持されますが、リフレクションからは見えません
  • RUNTIME — 保持され、リフレクションから見えます(デフォルト)
@Retention(AnnotationRetention.RUNTIME)
annotation class Important

@Important
class Order

fun main() {
    println("Important is readable at runtime")
}

複数のターゲット

複数のターゲットを列挙すると、アノテーションを複数の場所で使えるようになります。ここでは、クラスと関数の両方にアノテーションを付けられます。

@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
annotation class Audited

@Audited
class Account {
    @Audited
    fun withdraw() = "ok"
}

fun main() {
    println(Account().withdraw())
}

パラメーターのデフォルト値

アノテーションのパラメーターにはデフォルト値を設定できるため、呼び出し側で省略できます。これにより、一般的なケースを簡潔に記述できます。

annotation class Cache(val seconds: Int = 60)

@Cache
fun cheap() = 1

@Cache(seconds = 300)
fun expensive() = 2

fun main() {
    println("" + cheap() + " " + expensive())
}

配列パラメーター

配列型も使用できます。アノテーションを使うときは、配列リテラル構文[ ... ]で値を指定します。

annotation class Roles(val names: Array<String>)

@Roles(["admin", "editor"])
fun restricted() = "secret"

fun main() {
    println(restricted())
}

@Repeatable

デフォルトでは、1つの要素に同じアノテーションを1回しか付けられません。@Repeatableを付けると、複数回適用できます。

@Repeatable
annotation class Tag(val value: String)

@Tag("db")
@Tag("cache")
fun layered() = "ok"

fun main() {
    println(layered())
}

ネストしたアノテーションのパラメーター

アノテーションのパラメーター自体を別のアノテーションにすることもでき、構造化されたメタデータを構築できます。

annotation class Author(val name: String)
annotation class Module(val owner: Author)

@Module(Author("Grace"))
class Payments

fun main() {
    println("Nested annotation metadata defined")
}

適切なアノテーションの設計

適切に設計されたアノテーションには、次の特徴があります。

  • 明確で単一の目的がある
  • @Targetを設定し、誤った使い方をコンパイルエラーにする
  • リフレクションで必要な場合にだけRUNTIME保持を使う
  • 妥当なデフォルト値を提供する

定義から使用まで

アノテーションの定義は、全体の半分にすぎません。それだけでは何もしないメタデータです。何かがそれを読み取る必要があります。通常は実行時のリフレクションか、コンパイル時のアノテーションプロセッサーが読み取ります。次はリフレクションを使います。

クイックチェック

アノテーションの定義について理解度を確認しましょう。

振り返り

アノテーションの定義方法を学びました。

  • パラメーターを持つannotation class
  • 配置を制限する@Target
  • 保持期間を制御する@Retention
  • @Repeatableとデフォルト値

次は、リフレクションを使って型を調べます。

よくある質問

「アノテーションの定義」レッスンは無料ですか?

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

「アノテーションの定義」で何を学びますか?

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

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

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

「アノテーションの定義」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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