Получить значение аннотации для перечисления - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть эти аннотации:

@interface NotNull {
  boolean value() default false;
}

@interface Type {
  Class<?> value();
}

, а затем я использую их с перечислением:

public enum KeyMap implements IMapEnum {

  @Type(Integer.class)
  @NotNull
  USER_ID("user_id", "userId"),

  @NotNull
  USER_HANDLE("user_handle", "userHandle"),

  @NotNull
  USER_EMAIL("user_email", "userEmail");

  private String key;
  private String value;

  KeyMap(String k, String v) {
    this.key = k;
    this.value = v;
  }

  @Override
  public String getKey() {
    return this.key;
  }

  @Override
  public String getValue() {
    return this.value;
  }

}

мой вопрос - как мне получить значение аннотации для каждогоэкземпляр перечисления?Реализуемый интерфейс прост и не является частью вопроса:

public interface IMapEnum {
  String getKey();
  String getValue();
}

, но, может быть, кто-то может показать, как получить аннотации в методе getKey или getValue?

1 Ответ

0 голосов
/ 12 февраля 2019

Сначала вам нужно добавить удержание времени выполнения к вашим аннотациям, чтобы их можно было прочитать, используя отражение:

@Retention(RetentionPolicy.RUNTIME)
@interface NotNull {
    boolean value() default false;
}

@Retention(RetentionPolicy.RUNTIME)
@interface Type {
    Class<?> value();
}

Затем вы можете использовать отражение, чтобы получить аннотации, рассматривающие константу перечисления какПоле класса:

Field field = KeyMap.class.getField(KeyMap.USER_ID.name());
Annotation[] annotations = field.getDeclaredAnnotations();
System.out.println(Arrays.toString(annotations));

напечатает:

[@Type(value=java.lang.Integer.class), @NotNull(value=false)]
...