Quiero utilizar una anotación en forma de compilación segura.Enumeraciones y anotaciones
Para pasar el valor() a la Anotación, quiero usar la representación de Cadena de una enumeración.
¿Hay alguna manera de usar @A con un valor de 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();
}
actualización
necesito el tipo String en @A.
El punto es que puedo hacer esto
@A("" + 1)
void foo() {
}
Pero aquí el compilador reclamaciones "valor del atributo debe ser constante". ¿No es E.a constante?
@A("" + E.a)
void foo() {
}
"¿E tiene que ser una enumeración? Podrías probar: ..." Creo que puedes hacer algo similar con las enumeraciones también. Tendría que pasar el String que desea en el constructor para 'E', luego asignarlo a' public string strRepresentation'. Y luego simplemente haga '@A (E.strRepresentation)' – MatrixFrog
@MatrixFrog Incluso si puse 'public final String strRepresentation =" foo ";' en E, obtengo 'el valor del atributo debe ser constante' – leedm777