[英]How to determine the Type of an object at runtime in Java for gson
看下面的代碼,它可以正常工作:
MyData myData = new MyData(1, "one");
MyData myData2 = new MyData(2, "two");
MyData [] data = {myData, myData2};
String toJson = gson.toJson(data, MyData[].class);
MyData [] newData = gson.fromJson(toJson, MyData[].class);
MyData只是一個具有int和String字段的簡單類。 這工作得很好。 但是,如果直到運行時才知道該類怎么辦? 例如,它可能不是“ MyData”,但可能是完全不同的類。 我們唯一知道的是類的名稱(表示為字符串),該名稱先前由發送方使用Class.forName確定。
如果對象不是數組,則可以正常工作,如下所示:
final Class<?> componentType = Class.forName(componentClassName);
context.deserialize(someElement, componentType);
上面的技術雖然不適用於數組。
有什么建議么?
在Java中,您可以通過調用獲取對象的類
object.getClass();
從Java文檔:
class Test {
public static void main(String[] args) {
int[] ia = new int[3];
System.out.println(ia.getClass());
System.out.println(ia.getClass().getSuperclass());
}
}
打印:
class [I
class java.lang.Object
您是說MyData成為通用類型T嗎? 如果是這樣,由於Java類型擦除,您將無法執行此操作。 類型T僅在編譯時可用。
您可以創建如下方法:
public T decodeJSON(String json, Class<T> type) {
GSON gson = new GSON();
return gson.fromJson(json, type);
}
String toJson = gson.toJson(Class.forName(obj, runtimeClassName + "[]"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.