Javaのカスタムアノテーション(Custom Annotations)は、コードにメタデータを追加するための仕組みです。アノテーションは@interface
キーワードを使用して定義され、開発者がクラス、メソッド、フィールド、または他のプログラム要素にメタデータを付加することができます。カスタムアノテーションは実行時に読み取ることができ、リフレクション機構を使用してプログラムで処理することができます。
カスタムアノテーションの使用例
- マーカーアノテーション(Marker Annotation)
- 単一値アノテーション(Single-Value Annotation)
- 複数値アノテーション(Multi-Value Annotation)
- メタアノテーション(Meta-Annotations)
順番に説明します。
マーカーアノテーション(Marker Annotation)
最もシンプルなカスタムアノテーションで、メンバ変数を含まず、単にマーカーの役割を果たします。例えば、@Deprecated
アノテーションを作成して、非推奨のメソッドやクラスをマークすることができます。
public @interface Deprecated {
}
単一値アノテーション(Single-Value Annotation)
1つのメンバ変数を含むカスタムアノテーションです。例えば、@Author
アノテーションを作成して、コードの作者を指定することができます。
public @interface Author {
String name();
}
アノテーションの使用例:
@Author(name = "John Doe")
public class MyClass {
// クラスの実装
}
複数値アノテーション(Multi-Value Annotation)
複数のメンバ変数を含むカスタムアノテーションです。例えば、@ColumnInfo
アノテーションを作成して、データベーステーブルの列情報を指定することができます。
public @interface ColumnInfo {
String name();
String type();
int length();
}
アノテーションの使用例
public class MyEntity {
@ColumnInfo(name = "id", type = "INT", length = 10)
private int id;
// 他のフィールドやメソッド
}
メタアノテーション(Meta-Annotations)
他のアノテーションに対して注釈を付けるためのアノテーションです。Javaには@Retention
、@Target
、@Documented
などの組み込みのメタアノテーションがいくつかあります。これらのメタアノテーションを使用して、より複雑なアノテーションの動作をカスタマイズすることができます。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CustomAnnotation {
// アノテーションの定義
}
上記の例では、@Retention(RetentionPolicy.RUNTIME)
は、実行時にアノテーションが利用可能であることを示し、@Target(ElementType.METHOD)
は、アノテーションをメソッドに適用できることを示しています。
カスタムアノテーションの処理は、リフレクション機構を使用して行われます。Javaのjava.lang.reflect
パッケージのクラスやメソッドを使用して、アノテーションを読み取り、処理することができます。例えば、アノテーションのメタデータに基づいて特定のロジックを実行するための汎用的なハンドラを作成することができます。
要約すると、カスタムアノテーションは開発者に対して柔軟かつ強力な方法を提供し、コードにメタデータを追加することができます。また、リフレクション機構を使用してアノテーションを処理することで、さまざまな機能や動作を実現することができます。
コメント