Я хочу использовать аннотацию в безопасном для компиляции виде.
Чтобы передать значение () в аннотацию, я хочу использовать строковое представление перечисления.
Есть ли способ использовать @A со значением из enum E?
public class T {
public enum E {
a,b;
}
// C1: i want this, but it won't compile
@A(E.a)
void bar() {
// C2: no chance, it won't compile
@A(E.a.toString())
void bar2() {
}
// C3: this is ok
@A("a"+"b")
void bar3() {
}
// C4: is constant like C3, is'nt it ?
@A(""+E.a)
void bar4() {
}
}
@interface A {
String value();
}
Обновление
Мне нужен тип String в @A.
Дело в том, что я могу сделать это
@A("" + 1)
void foo() {
}
Но здесь компилятор утверждает, что «значение атрибута должно быть постоянным». Не является ли E.a постоянной?
@A("" + E.a)
void foo() {
}