我正在尝试反序列化一些泛型类型。它工作得很好,但我想把这段代码换成一个方法。
Type listType = new TypeToken<TestResult<MyObject>>(){}.getType();
TestResult<MyObject> result = new Gson().fromJson(json, listType);
如何执行此操作,证明有关类型的信息?
答案 0 :(得分:2)
是的,你可以。有一个解决方法。 您只需要将“MyObject”的类型和类显式传递给方法。
在您的情况下,开发一种具有以下签名和正文的方法。
public <T> Object getGenericDataObjectFromJson(String json, Type t, Class<T> type) {
// Convert Json String to Java object
TestResult<T> obj = gson.fromJson(json, t);
return obj;
}
哪里
方法调用就像这样
GsonUtility gs = new GsonUtility();// Your gson utility class
JSONObject jsonObj = "your json string";
// Explicitly identifying the type so as to pass it to the method
// Because The type of a generics can't be determinted during runtime as #CKuk said
Type objectType = new TypeToken<DataObject<objectType>>(){}.getType();
TestResult<MyObject> resultObject= (TestResult<MyObject>) gs.getGenericDataObjectFromJson(jsonObj.toString(), objectType, MyObject.class);
答案 1 :(得分:0)
你做不到。 在运行时期间无法确定泛型的类型。
一个简单的解决方法是向MyObject
添加一个方法以返回结果类型(如代码示例的第一行)。