当前位置:网站首页>Lombok makes ⽤ @data and @builder's pit at the same time. Are you hit?
Lombok makes ⽤ @data and @builder's pit at the same time. Are you hit?
2022-07-05 11:05:00 【Java notes shrimp】
Click on the official account , utilize Fragment time to learn
The problem background
Lombok send ⽤ At the same time make ⽤@Data
and @Builder
, An error is reported when constructing a parameterless constructor ! Compile not pass . Here's the picture :
Lombok @Data and @Builder Analyze usage separately
Lombok send ⽤@Data
Sure ⽣ become ⽆ Participate in constructing classes ⾥⾯ All attributes of getter/setter
⽅ Law . It can simplify the development of our code .( Need to install Lombok Plug ins and leads ⼊Lombok rely on ).
For example, next ⾯ Of ⼀ Entity classes , lead ⼊Lombok after , Sure ⾃ dynamic ⽣ become GET/SET
⽅ Law and ⽆ Parameter constructor .
The compiled class by : You can see that it not only helps us generate get and set , There is also a default parameterless constructor
So how to automatically generate a parameter constructor ? Use @Builder
annotation , Will help us ⽣ Complete the construction of attributes ⽅ Law .
The compiled class by : You can see It has helped us build a full attribute constructor , But if the value only references @Builder
Annotations cannot be generated get and set Of .
But if at the same time ⽤@Data
and @Builder
Words , It can be seen that although ⽣ a GET/SET
⽅ Law , however ⽆ Reference structure ⽅ There is no law , This is obviously unacceptable , Because many frameworks can be adjusted ⽤⽆ Reference structure to create objects .
The compiled class:
We try to be in Tet1 class ,⼿ Dynamic add ⽆ Reference structure ⽅ Law . The compiler finds that an error is reported and fails :
resolvent
Method 1
Lombok At the same time make ⽤@Data
and @Builder
When , If you want to ⽣ become ⽆ Reference structure , Need to be in code ⾥⾯⼿ Dynamic leading ⼊ annotation @Tolerate
, Give Way Lombok stay ⽣ When you are in a class , Not aware of the specified constructor .
Method 2
Use the parameterless constructor directly + There is a way of involving constructors ,@RequiredArgsConstructor
To build a reference ,@NoArgsConstructor
To build a parameterless constructor , As shown in the figure :
The effect after compiling :
Lombok principle
Java The compilation of is divided into the following ⼏ Stages :
Parsing and filling symbol tables -> Annotation Processing -> Analysis and bytecode ⽣ become ->⽣ become ⼆ Base number class⽂ Pieces of .
Lombok send ⽤ Yes. JDK 6 Realized
JSR 269: Pluggable Annotation Processing API
( Compile time annotation processor ), It is in compile time to put Lombok The annotation code for , Convert to regular Java ⽅ Law ⽽ Implementation note ⼊.At compile time , When Java Source code is abstract idiom tree (AST) after ,Lombok Will be based on ⾃⼰ The annotation processor dynamically modifies AST, Add new code ( node ), Here ⼀ Cut hold ⾏ after , And then through the analysis ⽣ It becomes the final bytecode (.class) ⽂ Pieces of , This is it. Lombok The hold of ⾏ principle .
It can be implemented with the help of annotation processor ⼀ A simple one. Setter, Our implementation steps are :
⾃ Definition ⼀ An annotation tag is attached to ⼝, And implement ⼀ individual ⾃ Defined annotation handler ;
benefit ⽤ tools.jar Of javac api Handle AST ( Abstract syntax tree )3. send ⽤⾃ The defined annotation handler compiles the code .
1. Definition ⾃ Define annotations and annotation handlers
⾸ First create ⼀ individual MySetter.java
⾃ Definition ⼀ A note , The code is as follows :
Re realization ⼀ individual ⾃ Defined annotation handler , The code is as follows :
The test class is as follows :
2. To the annotation processor ⾏ compile , Subsequently make ⽤ The annotation processor advances the class ⾏ compile
⾸ The annotation processor needs to be modified first ⾏ compile (javac -cp ⽤ Yu Yin ⼊ Third ⽅jar Baojin ⾏ compile )
Then make ⽤ Annotation processor for this Person Test class into ⾏ compile :
Let's look at it later ⽣ Yes Person.class
, You can find Setter⽅ The law has ⽣ a :
summary
Of course, although the test class has ⽣ become Setter⽅ Law , But because it is at compile time ⽣ Yes , Therefore, we can't directly adjust when we are developing ⽤Setter⽅ French , therefore Lombok Provides plug-in mechanism ,⽅ So we can directly adjust it during development ⽤Lombok Characteristics of .
source :juejin.cn/post/7103011031672176677
recommend :
The most comprehensive java Interview question bank
PS: Because the official account platform changed the push rules. , If you don't want to miss the content , Remember to click after reading “ Looking at ”, Add one “ Star standard ”, In this way, each new article push will appear in your subscription list for the first time . spot “ Looking at ” Support us !
边栏推荐
猜你喜欢
九、磁盘管理
基于昇腾AI丨爱笔智能推出银行网点数字化解决方案,实现从总部到网点的信息数字化全覆盖
【广告系统】Parameter Server分布式训练
Detailed explanation of DDR4 hardware schematic design
【广告系统】增量训练 & 特征准入/特征淘汰
Based on shengteng AI Yisa technology, it launched a full target structured solution for video images, reaching the industry-leading level
Explanation of message passing in DGL
关于 “原型” 的那些事你真的理解了吗?【上篇】
Detailed explanation of MATLAB cov function
A mining of edu certificate station
随机推荐
2022年危险化学品经营单位主要负责人特种作业证考试题库及答案
购买小间距LED显示屏的三个建议
一次edu证书站的挖掘
uniapp
regular expression
跨页面通讯
Characteristics and electrical parameters of DDR4
2022年危险化学品生产单位安全生产管理人员特种作业证考试题库模拟考试平台操作
关于vray 5.2的使用(自研笔记)(二)
【全网首发】(大表小技巧)有时候 2 小时的 SQL 操作,可能只要 1 分钟
谈谈对Flink框架中容错机制及状态的一致性的理解
DDRx寻址原理
Huawei equipment configures channel switching services without interruption
小红书自研KV存储架构如何实现万亿量级存储与跨云多活
A mining of edu certificate station
Go-3-the first go program
PWA (Progressive Web App)
上拉加载原理
在C# 中实现上升沿,并模仿PLC环境验证 If 语句使用上升沿和不使用上升沿的不同
Use bat command to launch common browsers with one click