Close

Java - How to find Annotations On Enum Constants?

[Updated: May 15, 2018, Created: May 15, 2018]

Java Reflection Java Enum Java Annotations Java 

Following example shows how to find annotations on enum constants by reflection.

package com.logicbig.example;

import java.lang.annotation.*;
import java.lang.reflect.Field;
import java.util.LinkedHashMap;
import java.util.Map;


public class EnumFieldAnnotationExample {

  public static <E extends Enum, A extends Annotation> Map<E, A> getEnumsAnnotatedWith(
          Class<E> enumClass,
          Class<A> annotationType) {

      Map<E, A> map = new LinkedHashMap<>();
      if (enumClass == null || annotationType == null) {
          return map;
      }
      for (E enumConstant : enumClass.getEnumConstants()) {
          Field declaredField = null;
          try {
              declaredField = enumClass.getDeclaredField(enumConstant.name());
          } catch (NoSuchFieldException e) {
              //this exception will never be thrown
              e.printStackTrace();
          }
          if (declaredField != null) {//should never be null
              A annotation = declaredField.getAnnotation(annotationType);
              if (annotation != null) {
                  map.put(enumConstant, annotation);
              }
          }
      }
      return map;
  }

  public static void main(String[] args) {
      Map<Day, Weekend> map = getEnumsAnnotatedWith(Day.class, Weekend.class);
      map.forEach((k, v) -> System.out.printf("enum= %s, annotation= %s%n", k, v));
  }

  public enum Day {
      Monday,
      Tuesday,
      Wednesday,
      Thursday,
      Friday,
      @Weekend
      Saturday,
      @Weekend
      Sunday
  }

  @Target({ElementType.FIELD})
  @Retention(RetentionPolicy.RUNTIME)
  public @interface Weekend {}
}
enum= Saturday, annotation= @com.logicbig.example.EnumFieldAnnotationExample$Weekend()
enum= Sunday, annotation= @com.logicbig.example.EnumFieldAnnotationExample$Weekend()

See Also