当前位置:网站首页>Understand the deserialization principle of fastjson for generics
Understand the deserialization principle of fastjson for generics
2022-07-07 05:57:00 【Coriander Chat Game】
fastjson It is a very common one now json Serialization and deserialization tools , It was released by Alibaba , Although it has been thundering recently , Various vulnerabilities , But this does not affect our learning from him .
fastjson Use
Join the rely on
stay pom.xml Direct increase in fastjson Just rely on , This way down
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
Regular use
public static void main(String[] args) {
TreeNode treeNode = new TreeNode(10);
// To string
String jsonStr = JSON.toJSONString(treeNode);
// String to object
TreeNode treeNode1 = JSON.parseObject(jsonStr, TreeNode.class);
System.out.println();
}
The use of generics
Take a look at our commonly used deserialization
List<TreeNode> list = JSON.parseObject("",new TypeReference<List<TreeNode>>(){});
First explain : TypeReference Is a generic class , Holds the current type
The deserialization of generics here , How to achieve it ? How do you know what generic types need to be serialized at runtime ? Learn some knowledge today , It's also what I want to record today .
Source code
If you want to understand the principle, you have to dig the source code , It's no wonder to understand
Knowledge point 1 An anonymous class
new TypeReference<List>(){}
This line of code is to create an anonymous class , Equivalent to creating a class implementation TypeReference , Then you instantiate it . Don't get confused , Because we usually use interfaces , such as Runnable, If you are not familiar with it, you can review
Knowledge point 2 a key
Just click in TypeReference This class , You can see the following constructor
protected TypeReference(){
Type superClass = getClass().getGenericSuperclass();
// Here's the point , It seems that you can get generic information
Type type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
Type cachedType = classTypeCache.get(type);
if (cachedType == null) {
classTypeCache.putIfAbsent(type, type);
cachedType = classTypeCache.get(type);
}
this.type = cachedType;
}
Type type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
This function is rarely used in development , Even as an old driver, I haven't used this function , Have you used it ?
This sentence must be remembered , It is also the most important way to implement generics , It must be superclass, Also made a strong turn . Then switch to the type you want to use Note that there
summary
So just to conclude ,fastjson The underlying principle of deserialization of generics is based on type deserialize , The knowledge point is An anonymous class and getActualTypeArguments Finally, leave an assignment , You can simulate such a scenario , If you need to know the type of generics at runtime in development , This method can be used
边栏推荐
- SQL Server 2008 各种DateTime的取值范围
- Mac version PHP installed Xdebug environment (M1 version)
- Modes of optical fiber - single mode and multimode
- 牙齿干细胞的存储问题(未完待续)
- PTA 天梯赛练习题集 L2-003 月饼 测试点2,测试点3分析
- Reptile exercises (III)
- What EDA companies are there in China?
- Nodejs get client IP
- 【FPGA教程案例14】基于vivado核的FIR滤波器设计与实现
- OpenSergo 即将发布 v1alpha1,丰富全链路异构架构的服务治理能力
猜你喜欢
【日常训练--腾讯精选50】235. 二叉搜索树的最近公共祖先
一个简单的代数问题的求解
驱动开发中platform设备驱动架构详解
[cloud native] what is the microservice architecture?
如果不知道这4种缓存模式,敢说懂缓存吗?
Detailed explanation of platform device driver architecture in driver development
2pc of distributed transaction solution
Industrial Finance 3.0: financial technology of "dredging blood vessels"
Reptile exercises (III)
The 2022 China low / no code Market Research and model selection evaluation report was released
随机推荐
pytorch_ 01 automatic derivation mechanism
线性回归
Message queue: how to handle repeated messages?
PTA ladder game exercise set l2-004 search tree judgment
980. Different path III DFS
【FPGA教程案例13】基于vivado核的CIC滤波器设计与实现
Polynomial locus of order 5
What is dependency injection (DI)
产业金融3.0:“疏通血管”的金融科技
Modes of optical fiber - single mode and multimode
Hcip seventh operation
Why does the data center need a set of infrastructure visual management system
Web architecture design process
nVisual网络可视化
Data storage 3
Digital IC interview summary (interview experience sharing of large manufacturers)
CMD permanently delete specified folders and files
R语言【逻辑控制】【数学运算】
STM32按键状态机2——状态简化与增加长按功能
PowerPivot——DAX(函数)