読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

独自アノテーション作成

Java

独自アノテーションの作成についてまとめ

独自アノテーションの定義例

package sample.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface SampleAnnotation {
    public String value();
}

構文としては上記のように「@interface」として定義する


11行目
 アノテーションの有効範囲を設定する(省略可能)
 @Retentionに設定するのは次の3つ
  ・RetentionPolicy.SOURCE
    ソース内のみで有効。classファイルに残らない。
  ・RetentionPolicy.CLASS
    省略されたときのデフォルト値。
    classファイル内にそのアノテーションの情報が保持されるが、実行時には読み込まれない。
  ・RetentionPolicy.RUNTIME
    実行する際にもJavaVMにそのアノテーションの情報が読み込まれる。
    リフレクションを使用して値の取得が可能。


12行目
 アノテーションをつける場所を指定する
 省略するとアノテーションが付けれる場所ならどこでも可能になる
 設定できるのは下記のとおり
  ・ElementType.ANNOTATION_TYPE
    他のアノテーションに適用される
  ・ElementType.CONSTRUCTOR
    コンストラクタ
  ・ElementType.FIELD
    フィールド
  ・ElementType.LOCAL_VARIABLE
    ローカル変数
  ・ElementType.METHOD
    メソッド
  ・ElementType.PACKAGE
    パッケージ
  ・ElementType.PARAMETER
    パラメータ
  ・ElementType.TYPE
    クラス、インタフェース、または列挙型などの型

 複数の箇所に設定したい場合は{}で囲みカンマで区切って記述する

@Target({ElementType.FIELD, ElementType.METHOD})


14行目
 アノテーションに引数を設定する(省略可能)
 複数ある場合は以下のように記述する

public @interface SampleAnnotation {
    public String value();
    public int num();
}

 指定できる型はプリミティブ型・String・Class・列挙型・アノテーションとそれらの1次元配列のみ。


 引数が設定されている場合は、アノテーション使用時に引数を指定する

package sample.annotation;

public class Test {
    @SampleAnnotation(value = "サンプル", num = 1)
    private String s;
}


引数が一つで引数名valueの場合はvalue=を省略できる

public @interface SampleAnnotation {
    public String value();
}

public class Test {
    @SampleAnnotation("サンプル")
    private String s;
}


defaultを使うとアノテーションの引数を省略することが可能になる

public @interface SampleAnnotation {
	public String value() default "デフォルト";
}

public class Test {
    @SampleAnnotation
    private String s;
}

独自アノテーションの作成方法は簡単にまとめるとこんな感じ


↓に参考にしたサイトをあげておく

次は実際に定義したアノテーションをどのように使っていくかをまとめたいと思う
いまだにその辺はサッパリだから、時間かかるかも


参考サイト:
自作Javaアノテーション実装例 - サンプル01
アノテーション作成方法