【发布时间】:2013-02-21 15:34:42
【问题描述】:
我正在尝试使用与枚举值关联的注释字符串值,以获得对关联枚举值的引用。
我最终卡在了中途......目前我有以下开发代码:
注释代码:
public @interface MyCustomAnnotation{
String value();
}
枚举代码:
public enum MyEnum{
@MyCustomAnnotation("v1")
VALUE1,
@MyCustomAnnotation("v2")
VALUE2,
@MyCustomAnnotation("v3")
VALUE3,
}
使用枚举注解:
String matchString = "v1";
MyEnum myEnumToMatch;
// First obtain all available annotation values
for(Annotation annotation : (MyEnum.class).getAnnotations()){
// Determine whether our String to match on is an annotation value against
// any of the enum values
if(((MyCustomAnnotation)annotation).value() == matchString){
// A matching annotation value has been found
// I need to obtain a reference to the corrext Enum value based on
// this annotation value
for(MyEnum myEnum : MyEnum.values()){
// Perhaps iterate the enum values and obtain the individual
// annotation value - if this matches then assign this as the
// value.
// I can't find a way to do this - any ideas?
myEnumToMatch = ??
}
}
}
提前致谢。
【问题讨论】:
-
您不能真正使用
MyEnum.values(),因为注释附加到代码元素,而不是对象实例。您必须使用反射来访问存储枚举值常量的MyEnum的静态字段。MyEnum.class.getAnnotations()也不会返回任何内容,因为MyEnum类本身没有任何注释,因此循环不会运行。 -
您是否真的在调试器中启动了您的代码以实际查看程序状态并查看返回的值是什么?!
-
最终需要什么?
-
@millimoose - 注释可以附加到类、方法、字段甚至局部变量,所以不确定“注释附加到代码元素,而不是对象实例”是什么意思。
-
@parsifal 它们不能附加到 arbitrary 对象实例(如枚举值,或者说随机字符串)。只有代表代码元素的对象才带有注释。
标签: java enums annotations