Enum定数のアノテーション
Enumの定数に書かれたアノテーションを取得しようとして、少しハマったのでメモ。
適当なアノテーション。
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface RGB { }
ここでBlueに設定されたアノーテーションを取得したい。
public enum Color { Red, @RGB Blue, Yellow }
こうすれば良かった。
public class EnumTest { @Test public void testEnumAnnotation() { Color color = Color.Blue; Field[] fields = color.getClass().getFields(); Annotation[] annotations = fields[color.ordinal()].getAnnotations(); for (Annotation a : annotations) { System.out.println(a); } } }
ElementType.FIELDのJavaDocをみれば一目瞭然だったのですが
FIELD
public static final ElementType FIELD
フィールド宣言 (emum 定数を含む) です。
Enumはクラスとか変な頭になっていて
color.getClass().getAnnotations();
とやろうとしてハマってしもうたと。
勉強不足orz
もっと良いやり方あったら教えてください><