3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

おにぎり万太郎Advent Calendar 2019

Day 10

Javaのアノテーションを自作する

Posted at

アノテーションとは

クラスやメソッド、パッケージなどに対して付加情報を付与する機能。

アノテーションを自作する

import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(TYPE)
public @interface TestAnnotation {
    String testValue();
}

@Retention

アノテーションの情報が保持される範囲を指定します。

  • SOURCE コンパイラによって破棄される。
  • CLASS コンパイラによってクラスファイルに記録されるが、実行時には読み込まれない。(デフォルト)
  • RUNTIME コンパイラによってクラスファイルに記録され、実行時に読み込まれる。

@Target

アノテーションの適用可能場所を指定します。

  • TYPE クラス、インターフェースまたは列挙型宣言
  • FIELD フィールド宣言
  • METHOD メソッド宣言
  • PARAMETER メソッドの引数宣言
  • CONSTRUCTOR コンストラクター宣言
  • LOCAL_VARIABLE ローカル変数宣言
  • ANNOTATION_TYPE アノテーション宣言
  • PACKAGE パッケージ宣言
  • TYPE_PARAMETER 型引数宣言
  • TYPE_USE 型が使用されている場所
  • MODULE モジュール宣言

@interface

アノテーションを定義します。

自作したアノテーションを付与する

@TestAnnotation(testValue = "test value")
public class AnnotatedClass {
}

今回はクラスに対してアノテーションを付与しています。

アノテーションの情報を出力する

public class GetValue {
    public static void main(String[] args) {
        try {
            Class<?> targetClass = Class.forName("AnnotatedClass");
            var testAnnotation = (TestAnnotation) targetClass.getAnnotation(TestAnnotation.class);
            System.out.println(testAnnotation.testValue());
        } catch (Exception e) {
            // 例外に対する処理
        }
    }
}

実行するとtest valueが出力されます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?