当前位置: 首页 > news >正文

汕头网站排名优化/电子商务网站建设多少钱

汕头网站排名优化,电子商务网站建设多少钱,网站建设网站制作网站设计,wordpress哪个主题好前言Jackson是一个比较流行的Json序列化和反序列化框架。本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TypeReference的实现原理。对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。实例Jackson ObjectMapper的r…

前言

Jackson是一个比较流行的Json序列化和反序列化框架。本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TypeReference的实现原理。对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。

实例

Jackson ObjectMapper的readValue可以将Json字符串反序列化为Java对象。如下例中将[{"id":null,"name":" ","age":500,"gender":false,"email":"email","employed":true,"salary":10}]反序列化为List<UserResource>类型。

Json字符串:

[{"id": null,"name": " ","age": 500,"gender": false,"email": "email","employed": true,"salary": 10
}]

UserResource实体类:

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserResource {private UUID id;private String name;private int age;private boolean gender;private String email;private boolean employed;private BigDecimal salary;
}

实现

理想的实现方式

理想的实现方式是告诉ObjectMapperreadValue方法,我要的是List<UserResource>,帮我反序列化成这个类型。

List<UserResource> list = new ObjectMapper().readValue(userResourcesStr, List<UserResource>.class);

现实是编译器告诉你这不行,Cannot select from parameterized type. 也很好理解,Java编译器认为List是Class,而List则不是。

换一种方式实现

既然不能用List<UserResource>.class, 那如果我告诉ObjectMapperreadValue方法,我要的是List类型,但返回值类型是List<UserResource>, 会发生什么呢?

List<UserResource> list = new ObjectMapper().readValue(userResourcesStr, List.class);

这时候倒没有编译错误, 但是会有警告:Unchecked assignment: 'java.util.List' to 'java.util.List<UserResource>', 显然ObjectMapper并不能反序列化为UserResource类型,而是LinkedHashMap类型。如下图所示:

4271183d66711f3e69058d81231cdbdc.png

TypeReference的实现方式

ObjectMapper提供了readValue(String content, TypeReference valueTypeRef)接口,第二个参数为new一个TypeReference的子类实例:new TypeReference<List<UserResource>>(){}。泛型抽象类TypeReference用于通过子类获取完整的泛型类型信息。

public <T> T readValue(String content, TypeReference valueTypeRef)
List<UserResource> list = new ObjectMapper().readValue(userResourcesStr, new TypeReference<List<UserResource>>(){});

4095c5e4065ac7b35c29886185739d52.png

TypeReference 实现原理

上例中new TypeReference<List<UserResource>>(){}子类的实例,TypeReference源码部分比较简单,主要逻辑是,通过getClass().getGenericSuperclass()获取父类中的参数化类型(ParameterizedType):

TypeReference主要源码:

protected TypeReference(){Type superClass = getClass().getGenericSuperclass();_type = ((ParameterizedType) superClass).getActualTypeArguments()[0];}

getGenericSuperclass返回一个Type类型的对象,代表实体(class, interface, primitive type or void)的直接父类,如果父类是参数化类型,则返回的Type对象可准确反映源代码中使用的实际type参数。

Class的genericInfo:

19a73258dd692049864f89a921deacf1.png

总结

  • Jackson ObjectMapper 提供了TypeReference支持对泛型对象的反序列化;
  • 对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。
http://www.lbrq.cn/news/1047601.html

相关文章:

  • 盐城市住房和城乡建设局门户网站/关键词检测
  • 初学者做网站的软件/国内高清视频素材网站推荐
  • 帮别人做违法网站会判刑吗/做网站用什么软件好
  • 网站建设网络公司/什么公司适合做seo优化
  • 网站建设项目风险管理的主要内容/做一个简单的网站需要多少钱
  • 怎样利用网站做淘宝客/网站关键词seo费用
  • 郑州网站制作天强科技/亚马逊关键词排名提升
  • 谷歌平台推广/厦门百度关键词优化
  • 兼职开发网站开发/网络营销的目的是
  • (小企制作)自制/互联网关键词优化
  • 集团网站建设方案/哈尔滨百度搜索排名优化
  • 广州哪家网站建设最好/国内专业seo公司
  • 邢台网站制作哪里有/关键词查询的分析网站
  • 连云港网站关键词优化/成都网站seo
  • 怎样做编辑发到网站/关键词排名查询官网
  • 网站和小程序的区别/百度网盘免费下载
  • 深圳中企动力/成都高薪seo
  • wordpress邮件/郑州seo技术
  • 泉州有专门帮做网站的吗/哈尔滨网络优化推广公司
  • 网站建设编辑工作总结/北京最新疫情情况
  • 漂亮的学校网站模板下载/网站域名在哪里查询
  • 网站的360快照怎么做/今日头条国际军事新闻
  • 网站切片怎么做/网络营销的成功案例分析
  • 网站seo哪家做的好/seo网络贸易网站推广
  • 参与赌博网站建设可判几年/国际新闻界
  • 郑州网站建设 58/qq引流推广软件哪个好
  • 华春建设工程项目管理有限公司网站/seo诊断站长
  • 郑州外贸网站建设商家/免费域名服务器
  • 济南专门做网站的公司/友情链接导航
  • 无锡好的网站公司/舆情监控系统
  • 构建企业级Odoo 18 WMS——功能、架构与拓展蓝图
  • 【软考中级网络工程师】知识点之 IPv6 全解析
  • ShadowKV 机制深度解析:高吞吐长上下文 LLM 推理的 KV 缓存“影子”方案
  • 数模个人笔记
  • 本地部署接入 whisper + ollama qwen3:14b 总结字幕
  • 机器翻译:需要了解的数学基础详解