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

平顶山网站建设关键词推广方式

平顶山网站建设,关键词推广方式,南宁做网站找哪家公司,广州网站托管Jackson是一个比较流行的Json序列化和反序列化框架。本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TyperReference的实现原理。对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。 Jackson ObjectMapper的readVa…

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

Jackson ObjectMapper的readValue可以将Json字符串反序列化为Java对象。

例:如将下列Json串反序列化为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;
}

1)理想的实现方式:

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

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

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

2)换一种实现方式

既然不能用List<Resource>.class,那如果我告诉ObjectMapper的readValue方法,我要的是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类型。如下图所示:

在这里插入图片描述
3)TypeReference的实现方式

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

在这里插入图片描述

List<UserResource> list = new ObjectMapper().readValue(userResourcesStr, new TypeReference<List<UserResource>>(){});

在这里插入图片描述
4)TypeReference实现原理

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

这部分不清楚可以看:Java 中的Type类型及其实现【学习记录】

TypeReference主要源码:

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

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

Class的genericInfo:

在这里插入图片描述
5)总结:

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

相关文章:

  • 各大网站怎么把世界杯做头条外链网站大全
  • 广州网站制作后缀推广策略可以分为哪三种
  • seo优化杭州win7系统优化
  • 武汉网站建设开发在线搜索引擎
  • 稿定设计app下载厦门网站流量优化价格
  • 做丝袜网站能赚钱吗外贸网站建设流程
  • 济南市建设监理有限公司网站市场监督管理局是干什么的
  • 网站后台对接表如何策划一个营销方案
  • 网站开发多语言切换思路百度后台管理
  • 书店商城网站设计今日新闻快讯
  • 布吉网站建设哪家效益快百度做广告费用
  • 自己怎么做卡密网站竞价排名是什么意思
  • 北京网站建设排名google搜索引擎入口 镜像
  • 广西模板厂哪家价格低淘宝seo推广优化
  • 网站模板开发平台怎么做长沙网站推广排名优化
  • 医疗产品网站建设做销售怎么和客户聊天
  • 鲅鱼圈网站在哪做seo刷网站
  • 网站倒计时怎么做的百度搜索页面
  • 一级a做爰网站开封网站设计
  • 做seo网站二十条疫情优化措施
  • 网站开发加个藏语seo编辑培训
  • 微网站如何做天津网站建设优化
  • 中小企业网站建设开题报告网站搭建平台
  • 密云网站制作案例国家优化防控措施
  • 怎么让别人看到自己做的网站日本免费服务器ip地址
  • 什么软件可以做动画seo外包大型公司
  • 怎么做彩票网站代理职业培训学校加盟
  • 网站设置受信任北京优化核酸检测
  • WordPress授权站资源网网络营销与直播电商学什么
  • 网站首页的作用摘抄一小段新闻