Я хочу создать класс параметров, который содержит структуру ключ-значение.
Эта карта заполнена содержимым файла конфигурации во время выполнения.
Чтобы проверить, что я хочу настроить, определите необходимые ключи для аннотации класса Option, например:
// Map must contain a entry with key 'foo' and key 'bar'
@requiredKey("foo")
@requiredKey("bar")
class Options {
Map<String, String> optionsMap;
}
Поэтому я создал повторяющуюся аннотацию:
@Retention(RetentionPolicy.RUNTIME)
public @interface requiredKeys {
requireKey[] value();
}
@Repeatable(requiredKeys)
public @interface requredKey {
String value();
}
Во время выполнения я звоню requiredKey[] anno = options.getAnnotationsByType(requiredKey.class))
Это прекрасно работает, если количество указанных аннотаций> 1. Но если число аннотации ровно одна, я не могу их получить (getAnnotationsByType
возвращает пустой массив)
работает:
@requiredKey("foo")
@requiredKey("bar")
class Options {
Map<String, String> optionsMap;
}
// anno holds 'foo' and 'bar'
requiredKey[] anno = options.getAnnotationsByType(requiredKey.class))
не работает:
@requiredKey("foo")
class Options {
Map<String, String> optionsMap;
}
// anno is empty
requiredKey[] anno = options.getAnnotationsByType(requiredKey.class))
Не знаю Я не могу понять это поведение :(
Итак, мои вопросы:
- Каково объяснение такого поведения?
- Как я могу заставить это работать?
Спасибо