Я хотел бы использовать константы для значений аннотаций.
interface Client {
@Retention(RUNTIME)
@Target(METHOD)
@interface SomeAnnotation { String[] values(); }
interface Info {
String A = "a";
String B = "b";
String[] AB = new String[] { A, B };
}
@SomeAnnotation(values = { Info.A, Info.B })
void works();
@SomeAnnotation(values = Info.AB)
void doesNotWork();
}
Константы Info.A
и Info.B
могут использоваться в аннотации, но не в массиве Info.AB
, поскольку в этом месте должен быть инициализатор массива. Значения аннотации ограничены значениями, которые могут быть включены в байтовый код класса. Это невозможно для константы массива, поскольку она должна быть построена при загрузке Info
. Есть ли способ обхода проблемы?