我有一個枚舉如下:如何在運行時將Java Enum轉換爲Json?
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()));
}
}
}
此代碼打破了以下異常:異常在線程「主」 java.lang.IllegalArgumentException異常:錯誤的參數個數
任何幫助將不勝感激。最終目標是能夠爲SomeType {SOME_KEY:「display-value」}獲取json對象。爲此,我無法使用反射來獲取枚舉常量的值。
說實話:我發現一個可變'enum'是一個非常** **奇怪的構造,並會認爲這是一個代碼氣味。 –
您能否更好地澄清一下'代碼味道'!另外,我不想讓枚舉變成可變的,因爲我不會修改它。我想要的只是動態生成一個JSON,以便我不需要在任何地方對類名進行硬編碼。這必須在客戶端使用。 – DeeTee
爲什麼不簡單地使用「GSON」並讓它爲你生成JSON?它具有所需的所有功能,包括註釋和內容。 –