fastjson为何使用TypeReference?(下)

简介: fastjson为何使用TypeReference?

         

输出为

class java.util.HashMap
class java.lang.String
class java.lang.Integer
=====newclass=====
class java.util.AbstractMap
K
V
=====subclass=====
class java.util.HashMap
class java.lang.String
class java.lang.Integer

获取到了实际类型,就可实现对泛型的反序列化。


Java虽然运行时会有类型擦除,但会保留Field的泛型信息,可通过Field.getGenericType() 取字段的泛型。

public class FieldGenericKest {
    public  Map<String,Integer> map = new HashMap<>();
    public List<Long> list = new ArrayList<>();
    public static void main(String[] args) throws Exception {
        FieldGenericKest kest = new FieldGenericKest();
        Field map = kest.getClass().getField("map");
        Field list = kest.getClass().getField("list");
        System.out.println("=====map=====");
        System.out.println("map.getType=" + map.getType());
        System.out.println("map.getGenericType=" + map.getGenericType());
        System.out.println("=====list=====");
        System.out.println("list.getType=" + list.getType());
        System.out.println("list.getGenericType=" + list.getGenericType());
    }
}

输出

=====map=====
map.getType=interface java.util.Map
map.getGenericType=java.util.Map<java.lang.String, java.lang.Integer>
=====list=====
list.getType=interface java.util.List
list.getGenericType=java.util.List<java.lang.Long>

注意这里不能获取到字段的真实类型HashMap和ArrayList。

真实的类型当然不能用Field来获取,需要用对应的Value来获取

Object mapVal = map.get(kest);
if(mapVal != null){
    Class<?> clz = mapVal.getClass();
    System.out.println(mapVal.getClass().getName());
}

因为泛型的运行时擦除,对于局部变量来说, 泛型信息是无法获取的


参考


http://www.java2s.com/Tutorials/Java/java.lang/Class/Java_Class_getGenericSuperclass_.htm

https://zhaoyanblog.com/archives/186.html

https://developer.aliyun.com/article/609441


目录
相关文章
|
JSON fastjson Java
FastJson、JackJson 以及 Gson 的区别
FastJson、JackJson 以及 Gson 是 Java 生态圈中三种常用的 Json 解析器,它们均可将 Java 对象序列化为 Json 格式的字符串,也可将 Json 字符串反序列化为 Java 对象。下面我们讨论一下三者在序列化和反序列化操作中的一些区别。
1018 0
|
3月前
|
JSON fastjson Java
使用FastJson
使用FastJson
147 1
|
4月前
|
JSON fastjson Java
Gson与FastJson详解
综上,Gson和FastJson都是用于Java对象和JSON数据互相转换的优秀库,选择哪个取决于性能、功能需求和个人偏好。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
66 2
|
存储 缓存 JSON
fastjson2为什么这么快
fastjson2 提升速度的核心技术
75769 6
fastjson2为什么这么快
|
JSON 安全 fastjson
gson与fastjson
gson与fastjson
101 0
|
JSON fastjson Java
FastJson使用技巧
FastJson使用技巧
|
fastjson Java
fastjson的使用
fastjson的使用
129 0
|
XML JSON 缓存
关于 FastJson
因为公司提供的基础框架使用的是 FastJson 框架、而部门的架构师推荐使用 Jackson。所以特此了解下 FastJson 相关的东西。
674 0
|
SQL JSON 缓存
fastjson学习笔记
JSON相信大家对他也不陌生了,前后端交互中常常就以JSON来进行数据交换。而有的时候,我们也会将JSON直接保存在数据库中。
296 0
fastjson学习笔记
|
JSON fastjson Java
Fastjson 使用
fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean序列化为JSON字符串,也可以从 JSON 字符串反序列化到 JavaBean。 功能完备: 支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。 下载 jar包 或者配置 maven 依赖:
2546 0