我有一个枚举如下:
public enum SomeType {
SOME_KEY (some-display-value-as-label);
private String label;
private SomeType(String label){
this.label=label;
}
public String getLabel() {
return label;
}
public void setLabel(String value) {
this.label = value;
}
}
现在我正在使用谷歌反射库并提出了一个自定义注释,我在上面用@makejson之类的注释标记了上面的枚举。
这个想法是在应用程序启动时使用 @makejson 注释对所有类的反射进行扫描,然后为每个枚举生成 json 对象。
我想做的是在启动课上:
Reflections reflections = new Reflections("my.package.name");
Set<Class<?>> annotatedClasses = reflections.getTypesAnnotatedWith(MakeJson.class);
for (Class<?> annotated : annotatedClasses) {
if (annotated.isEnum()) {
MakeJson j = annotated.getAnnotation(MakeJson.class);
Object[] constants = annotated.getEnumConstants();
Method[] methods = annotated.getMethods();
Method getValue = null;
for (Method m : methods) {
if ("valueOf".equals(m.getName())) {
getValue = m; //get Reference of valueOf method
break;
}
}
//List<Object> labels = Arrays.asList(m.invokem.getReturnType().isEnum()(annotated));
for (Object constant : constants) {
System.out.println(constant.toString());
System.out.println(getValue.invoke(annotated,constant.toString()));
}
}
}
此代码因以下异常而中断:线程“main”java.lang.IllegalArgumentException 中的异常:参数数量错误
任何帮助将不胜感激。最终目标是能够获得 SomeType{SOME_KEY:"display-value"} 的 json 对象。为此,我无法使用反射获得枚举常量的值。