アノテーションの定義
カスタムアノテーションを作成します
「アノテーションの定義」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- アノテーションの使用
- アノテーションの定義
- リフレクションの基礎
- 実践的なリフレクション