我想在编译安全的表单中使用Annotation。枚举和注释
要将value()传递给Annotation,我想要使用枚举的String表示形式。
有没有办法使用@A与来自枚举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();
}
更新
我需要@A String类型。
的一点是我可以做到这一点
@A("" + 1)
void foo() {
}
但这里的编译器索赔“的属性值必须是常量”。 Is'nt E.a不变?
@A("" + E.a)
void foo() {
}
“E必须是一个枚举吗?你可以试试:......”我认为你也可以用enums做类似的事情。你必须在'E'的构造函数中传入你想要的字符串,然后将它分配给'public final String strRepresentation'。然后只要做@A(E.strRepresentation)' – MatrixFrog 2010-03-28 04:47:27
@MatrixFrog即使我把'public final String strRepresentation =“foo”;'放在E上,我得到'属性值必须是常量' – leedm777 2010-03-28 04:55:33