当前位置:网站首页>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
边栏推荐
猜你喜欢
Realize GDB remote debugging function between different network segments
Introduction to distributed transactions
Detailed explanation of platform device driver architecture in driver development
往图片添加椒盐噪声或高斯噪声
PTA 天梯赛练习题集 L2-004 搜索树判断
C nullable type
苹果cms V10模板/MXone Pro自适应影视电影网站模板
Différenciation et introduction des services groupés, distribués et microservices
Add salt and pepper noise or Gaussian noise to the picture
cf:C. Column Swapping【排序 + 模拟】
随机推荐
Cf:c. column swapping [sort + simulate]
Check Point:企业部署零信任网络(ZTNA)的核心要素
Nvisual network visualization
Detailed explanation of platform device driver architecture in driver development
SAP ABAP BDC(批量数据通信)-018
Flinksql read / write PgSQL
C. colonne Swapping [tri + Simulation]
pytorch_ 01 automatic derivation mechanism
Go语学习笔记 - gorm使用 - gorm处理错误 | Web框架Gin(十)
Mac version PHP installed Xdebug environment (M1 version)
CMD permanently delete specified folders and files
三级菜单数据实现,实现嵌套三级菜单数据
EMMC print cqhci: timeout for tag 10 prompt analysis and solution
Sidecar mode
Ten stages of becoming a Senior IC Design Engineer. What stage are you in now?
Industrial Finance 3.0: financial technology of "dredging blood vessels"
Red hat install kernel header file
STM32按键状态机2——状态简化与增加长按功能
Senior programmers must know and master. This article explains in detail the principle of MySQL master-slave synchronization, and recommends collecting
MFC BMP sets the resolution of bitmap, DPI is 600 points, and gdiplus generates labels