0Pricing
Java Academy · レッスン

アノテーションの定義:要素とデフォルト値

@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フィードバックを取得できます。ローカル設定は不要です。

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

  1. アノテーションの定義:要素とデフォルト値
  2. 保持ポリシーと対象型
  3. 実行時のアノテーション処理
  4. コンパイル時アノテーションプロセッサー
← Java Academyに戻る