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

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

もっと良いやり方あったら教えてください><