次のような列挙型があります。
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;
}
}
今、私はGoogleリフレクションライブラリを使用しており、@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()));
}
}
}
このコードは次の例外で中断されます: Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
どんな助けでも大歓迎です。最終的な目的は、SomeType{SOME_KEY:"display-value"} の json オブジェクトを取得できるようにすることです。このため、リフレクションを使用して列挙型定数の値を取得できません。