【发布时间】:2015-01-18 21:06:15
【问题描述】:
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);
【问题讨论】:
-
您是否尝试使用正在查看的界面编写方法并遇到问题?
-
@Chris 抱歉,我不明白你的问题。
-
@patstuart
toJson的 javadoc 看起来他们可能会回答你的问题。Type typeOfSrc = new TypeToken<List<MyObject>>(){}.getType(); -
@patstuart 我指的是您的伪代码 -
private static final Type MY_OBJECT_TYPE = TypeUtils.generate(List.class, MyObject.class);- 您是否尝试编写自己的TypeUtils.generate版本来实现这个提议的接口? -
其实在2019年有这么一件事,几乎就是你在伪代码里表达的:
org.apache.commons.lang3.reflect.TypeUtils.parameterize(...)见:commons.apache.org/proper/commons-lang/javadocs/api-3.9/org/…
标签: java generics reflection