「Java」アノテーションの情報取得
あまり気にすることなく使ってたアノテーション。ちょっと調べてみようということで、独自アノテーション作って、クラス、メソッドに設定されたアノテーションの情報取得してみるってあたりをやってみました。その時のメモです。
1. 独自アノテーションの作成
■ TypeAnnoTest.java
package test; 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.TYPE) public @interface TypeAnnoTest { }
■ MethodAnnoTest.java
package test; 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.METHOD) public @interface MethodAnnoTest { }
何の情報も持たないアノテーションを作った。
2. 独自アノテーションを使う、および、アノテーションの情報を取得するプログラム
package run; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import test.MethodAnnoTest; import test.TypeAnnoTest; public class AnnoTest { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class<AnnoTest> c1 = AnnoTest.class; Method m1 = c1.getMethod("method1", null); // m1.invoke(new AnnoTest(), null); Annotation[] a1 = m1.getAnnotations(); for(Annotation aa : a1) { System.out.println(aa); } Class<Test> c2 = Test.class; // Method m2 = c2.getMethod("method2", null); // m2.invoke(new Test(), null); Annotation[] a2 = c2.getAnnotations(); for(Annotation aa : a2) { System.out.println(aa); } } @MethodAnnoTest public void method1() { System.out.println("method1"); } } @TypeAnnoTest class Test { public void method2() { System.out.println("method2"); } }
上記の AnnoTest.java 実行すると、以下の出力が得られる。
@test.MethodAnnoTest() @test.TypeAnnoTest()
クラス、メソッドに定義したアノテーションの情報が取得できております。
目的が微妙でだいぶとイマイチ感ありますが、以上です。
アノテーションは、以下の Web ページを参考にさせていただきました。
・【改訂版】Eclipseではじめるプログラミング(22):いまさら聞けない「Javadoc」と「アノテーション」入門 (1/4) - @IT
http://www.atmarkit.co.jp/ait/articles/1105/19/news127.html