Gson通过借助TypeToken获取泛型参数的类型的方法
2016-11-24 11:13
579 查看
this.multiMedia = StringUtils.isBlank(map.get("multimedia")) ? null : new Gson().fromJson(map.get("multimedia"), new TypeToken<List<GroupIdModel>>() { }.getType());
由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型)。
但是有的时候,我们确实需要获知泛型参数的类型,比如将使用了泛型的Java代码序列化或者反序列化的时候,这个时候问题就变得比较棘手。
?
2 4 6 8 | class T value; } Gson gson = Gson(); Foo<Bar> foo = Foo<Bar>(); gson.toJson(foo); gson.fromJson(json, foo.getClass()); <code comments"="">// Fails to deserialize foo.value as Bar |
对于上面的类Foo<T>,由于在运行期间无法得知T的具体类型,对这个类的对象进行序列化和反序列化都不能正常进行。Gson通过借助TypeToken类来解决这个问题。
public QuestShow(QuestShows questShows) { sid = questShows.getSid(); question = questShows.getQuestion(); answer = questShows.getAnswer(); hint = questShows.getHint(); think = questShows.getThink(); QTDicPoint = questShows.getQTDicPoint(); QTDicFormular = questShows.getQTDicFormular(); practice = new Gson().fromJson(questShows.getPractice(), new TypeToken<List<Practice>>() { }.getType()); knowledges = new Gson().fromJson(questShows.getKnowledges(), new TypeToken<List<Knowledge>>() { }.getType()); videos = new Gson().fromJson(questShows.getVideos(), new TypeToken<Set<VideoInfo>>() { }.getType()); diff = questShows.getDiff(); type = questShows.getType(); subject = questShows.getSubject(); section = questShows.getSection(); }
相关文章推荐
- Gson通过借助TypeToken获取泛型参数的类型的方法
- Gson通过借助TypeToken获取泛型参数的类型的方法
- Gson通过借助TypeToken获取泛型参数的类型的方法(转)
- Android:Gson通过借助TypeToken获取泛型参数的类型的方法
- Gson通过借助TypeToken获取泛型参数的类型的方法(转)
- Gson通过借助TypeToken获取泛型参数的类型的方法(转)
- java取得泛型的参数类型(Gson通过借助TypeToken获取泛型参数的类型的方法)
- Gson通过借助TypeToken获取泛型参数的类型的方法
- Gson通过借助TypeToken获取泛型参数的类型的方法
- Gson通过借助TypeToken获取泛型参数的类型的方法
- Gson通过借助TypeToken获取泛型参数的类型的方法(转)
- Gson通过借助TypeToken获取泛型参数的类型的方法
- 黑马程序员——通过反射获取方法中泛型参数的指定类型
- Gson中TypeToken如何实现获取参数类型
- java再复习——通过反射获取到方法的参数和返回值的泛型类型
- java基础-反射 --通过反射 获取泛型实际类型参数
- The Java™ Tutorials — Generics :Generic Methods and Bounded Type Parameters 泛型方法和受限类型参数
- 利用gson处理Java反射TypeToken泛型运行时类型擦除
- 通过反射获取泛型的参数类型信息
- 通过反射获取泛型参数数组(Class对象 List类型)