当前位置:网站首页>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
边栏推荐
- Personal imitation SSM framework
- How to improve website weight
- 如何提高网站权重
- Introduction to distributed transactions
- Digital IC interview summary (interview experience sharing of large manufacturers)
- C nullable type
- Web Authentication API兼容版本信息
- 数字IC面试总结(大厂面试经验分享)
- Reptile exercises (III)
- Flask 1.1.4 werkzeug1.0.1 analyse du code source: processus de démarrage
猜你喜欢

Add salt and pepper noise or Gaussian noise to the picture

ForkJoin最全详解(从原理设计到使用图解)

Determine whether the file is a DICOM file

PowerPivot——DAX(函数)

Digital IC interview summary (interview experience sharing of large manufacturers)

What are the common message queues?

【FPGA教程案例14】基于vivado核的FIR滤波器设计与实现

数据中心为什么需要一套基础设施可视化管理系统

pytorch_ 01 automatic derivation mechanism

产业金融3.0:“疏通血管”的金融科技
随机推荐
ForkJoin最全详解(从原理设计到使用图解)
CTFshow--常用姿势
Detailed explanation of platform device driver architecture in driver development
What are the common message queues?
Things about data storage 2
Web authentication API compatible version information
Opensergo is about to release v1alpha1, which will enrich the service governance capabilities of the full link heterogeneous architecture
STM32 key state machine 2 - state simplification and long press function addition
404 not found service cannot be reached in SAP WebService test
mac版php装xdebug环境(m1版)
Nvisual network visualization
Distributed global ID generation scheme
An example of multi module collaboration based on NCF
得物客服一站式工作台卡顿优化之路
Senior programmers must know and master. This article explains in detail the principle of MySQL master-slave synchronization, and recommends collecting
Check Point:企业部署零信任网络(ZTNA)的核心要素
数字IC面试总结(大厂面试经验分享)
Input of native applet switches between text and password types
Why does the data center need a set of infrastructure visual management system
What is message queuing?