GSON的toJson函数接受一个类型参数,该参数在反映对象时检查Type。这对于将对象反射到集合中非常有用。
然而,我能找到获得Type的唯一方法是通过一组丑陋的编码扭曲:
//used for reflection only
@SuppressWarnings("unused")
private static final List<MyObject> EMPTY_MY_OBJECT = null;
private static final Type MY_OBJECT_TYPE;
static {
try {
MY_OBJECT_TYPE = MyClass.class.getDeclaredField("EMPTY_MY_OBJECT").getGenericType();
} catch (Exception e) {
...
}
}
private List<MyObject> readFromDisk() {
try {
String string = FileUtils.readFileToString(new File(JSON_FILE_NAME), null);
return new Gson().fromJson(string, MY_OBJECT_TYPE);
} catch (Exception e) {
...
}
}
有没有一种方法可以在不引用内部类变量的情况下初始化Type?伪代码看起来像这样:
private static final Type MY_OBJECT_TYPE = TypeUtils.generate(List.class, MyObject.class);
答案 0 :(得分:4)
toJson
的Javadoc希望回答您的问题
typeOfSrc - src的特定通用类型。您可以使用TypeToken类获取此类型。例如,要获取Collection的类型,您应该使用:
Type typeOfSrc = new TypeToken<Collection<Foo>>(){}.getType();
所以在你的实例中。
private static final Type MY_OBJECT_TYPE = new TypeToken<List<MyObject>>(){}.getType();
答案 1 :(得分:0)
也可以这样做:
private static final Type MY_OBJECT_TYPE = TypeToken.getParameterized(List.class, MyObject.class).getType();