アノテーションの定義:要素とデフォルト値
@interface でカスタムアノテーションを作成し、デフォルト値を持つ要素を定義して、メタアノテーションを適用します。
「アノテーションの定義:要素とデフォルト値」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
アノテーションとは
アノテーションは、クラス、メソッド、フィールド、パラメータに付加するメタデータです。アノテーション自体が直接動作を変更することはなく、コンパイラ、フレームワーク、実行時プロセッサに情報を提供します。
@interface によるアノテーションの宣言
カスタムアノテーションを宣言するには @interface を使用します。要素はメソッドのように記述します。デフォルト値は default で指定します。
@interface Retry {
int times() default 3;
long delayMs() default 1000L;
Class<? extends Throwable>[] on() default {Exception.class};
}アノテーションの適用
対象にアノテーションを適用します。デフォルト値がある要素は省略できます。名前が value の要素だけを指定する場合は、キーを省略して値だけを設定できます。
@Retry(times = 5, delayMs = 500)
public void callExternalService() { ... }
// Single-element shorthand:
@interface Label { String value(); }
@Label("production")
public class App {}アノテーション要素の型
要素に使用できるのは、プリミティブ型(int、long など)、String、Class、enum、別のアノテーション型、またはこれらの1次元配列だけです。
@interface Config {
String host();
int port() default 8080;
LogLevel level() default LogLevel.INFO; // enum
Class<?> handler() default DefaultHandler.class;
String[] tags() default {};
}メタアノテーション: @Retention
@Retention は、アノテーションを保持する期間を制御します。SOURCE(コンパイラによって破棄)、CLASS(.class 内に保持されるが実行時には利用不可)、RUNTIME(リフレクションで読み取り可能)があります。
@Retention(RetentionPolicy.RUNTIME)
@interface Retry {
int times() default 3;
}メタアノテーション: @Target
@Target は、アノテーションを適用できる場所を制限します。複数の対象を指定できます。
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Audited {
String description() default "";
}@Documented と @Inherited
@Documented は、アノテーションを Javadoc に含めます。@Inherited は、サブクラスがスーパークラスのアノテーションを継承できるようにします(クラスレベルのアノテーションに限ります)。
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Category {
String value();
}@Repeatable アノテーション
アノテーションに @Repeatable を付けると、同じ要素に複数回記述できるようになります。配列を保持するコンテナアノテーションを用意します。
@Repeatable(Tags.class)
@interface Tag { String value(); }
@interface Tags { Tag[] value(); }
@Tag("fast")
@Tag("stable")
public class Service {}デフォルト値と要素の省略
default 値がある要素は、呼び出し側で指定する必要がありません。デフォルト値がない要素は必須です。
@Retry // uses defaults: times=3, delayMs=1000
public void action1() {}
@Retry(times=1) // overrides only times; delayMs stays 1000
public void action2() {}アノテーションとマーカーインターフェースの違い
マーカーインターフェース(Serializable など)は instanceof で確認し、型情報を表します。アノテーションはより柔軟で、メタデータを保持したり要素を持たせたりできます。
よく使われる組み込みアノテーション
JDK のアノテーションとして、@Override、@Deprecated、@FunctionalInterface、@SuppressWarnings、@SafeVarargs を覚えておきましょう。
@Override
public String toString() { return "User{" + name + "}"; }
@Deprecated(since = "2.0", forRemoval = true)
public void oldMethod() {}確認問題
アノテーションを実行時に読み取り可能にする保持ポリシーはどれですか。
まとめ
アノテーションは @interface で宣言します。リフレクションで処理するには @Retention(RUNTIME) を使用し、@Target で使用範囲を制限し、default で任意の要素を定義します。@Repeatable を使うとアノテーションを重ねて指定できます。
よくある質問
「アノテーションの定義:要素とデフォルト値」レッスンは無料ですか?
はい。「アノテーションの定義:要素とデフォルト値」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「アノテーションの定義:要素とデフォルト値」で何を学びますか?
@interface でカスタムアノテーションを作成し、デフォルト値を持つ要素を定義して、メタアノテーションを適用します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「アノテーションの定義:要素とデフォルト値」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- アノテーションの定義:要素とデフォルト値
- 保持ポリシーと対象型
- 実行時のアノテーション処理
- コンパイル時アノテーションプロセッサー