当前位置:网站首页>lombok @Builder注解
lombok @Builder注解
2022-07-05 18:21:00 【fastjson_】
@Builder注解的使用
@Builder
public class Card {
private int id;
private String name;
private boolean sex;
}
Card card = Card.builder().
id(10).name("dasd").sex(true).
build();
优点
- 不需些太多的set方法来定义属性内容
- 写法更优雅
@Builder对类做了什么?
我们可以反编译生成的 Card.class
public class Card {
private int id;
private String name;
private boolean sex;
Card(int id, String name, boolean sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
public static Card.CardBuilder builder() {
return new Card.CardBuilder();
}
public static class CardBuilder {
private int id;
private String name;
private boolean sex;
CardBuilder() {
}
public Card.CardBuilder id(int id) {
this.id = id;
return this;
}
public Card.CardBuilder name(String name) {
this.name = name;
return this;
}
public Card.CardBuilder sex(boolean sex) {
this.sex = sex;
return this;
}
public Card build() {
return new Card(this.id, this.name, this.sex);
}
public String toString() {
return "Card.CardBuilder(id=" + this.id + ", name=" + this.name + ", sex=" + this.sex + ")";
}
}
}
那么其实很明显了,注解在编译后使得Card类中多了一个名为Card.CardBuilder的静态内部类。这个静态类拥有和Card类相同的属性,并且他额外实现了一些方法:
1.name、sex、id等的属性方法
其实这些方法和setAttribute十分类似,只是额外返回了实例本身,这使得它可以使用类似于链式调用的写法。
2.build方法
该方法调用Card类的全参构造方法来生成Card实例。
Card类还是实现了builder方法,这个方法生成一个空的Card.CardBuilder实例
缺点
最明显的一点,在生成Card实例之前,实际上是先创建了一个Card.CardBuilder实例,这样很明显额外占用了内存。
额外
@Builder(toBuilder = true)
这个选项允许你将一个实例化好的Card,更新字段生成新的Card实例。
public Card.CardBuilder toBuilder() {
return (new Card.CardBuilder()).id(this.id).name(this.name).sex(this.sex);
}
public static void main(String[] args) {
Card card = Card.builder().id(10).name("奔驰").sex(true).build();
Card card1 = card.toBuilder().name("宝马").build();
System.out.println(card);
System.out.println(card1);
}
Card(id=10, name=奔驰, sex=true)
Card(id=10, name=宝马, sex=true)
边栏推荐
- Generate classes from XML schema
- How to obtain the coordinates of the aircraft passing through both ends of the radar
- Introduction to the development function of Hanlin Youshang system of Hansheng Youpin app
- sample_rate(采样率),sample(采样),duration(时长)是什么关系
- The 2022 China Xinchuang Ecological Market Research and model selection evaluation report released that Huayun data was selected as the mainstream manufacturer of Xinchuang IT infrastructure!
- 【PaddleClas】常用命令
- buuctf-pwn write-ups (9)
- LeetCode 6109. Number of people who know the secret
- Memory management chapter of Kobayashi coding
- Electron installation problems
猜你喜欢
LeetCode 6109. Number of people who know the secret
Trust counts the number of occurrences of words in the file
最大人工岛[如何让一个连通分量的所有节点都记录总节点数?+给连通分量编号]
vs2017 qt的各种坑
使用Jmeter虚拟化table失败
Image classification, just look at me!
How to obtain the coordinates of the aircraft passing through both ends of the radar
Introduction to the development function of Hanlin Youshang system of Hansheng Youpin app
Find the first k small element select_ k
Fix vulnerability - mysql, ES
随机推荐
ViewPager + RecyclerView的内存泄漏
To solve the stubborn problem of Lake + warehouse hybrid architecture, xinghuan Technology launched an independent and controllable cloud native Lake warehouse integrated platform
Star ring technology data security management platform defender heavy release
SAP 特征 特性 说明
U-Net: Convolutional Networks for Biomedical Images Segmentation
JDBC reads a large amount of data, resulting in memory overflow
金太阳开户安全吗?万一免5开户能办理吗?
Wu Enda team 2022 machine learning course, coming
jdbc读大量数据导致内存溢出
Writing writing writing
Generate XML schema from class
《2022中国信创生态市场研究及选型评估报告》发布 华云数据入选信创IT基础设施主流厂商!
写作写作写作写作
兄弟组件进行传值(显示有先后顺序)
How to obtain the coordinates of the aircraft passing through both ends of the radar
Can communication of nano
在通达信上做基金定投安全吗?
buuctf-pwn write-ups (9)
@Extension, @spi annotation principle
让更多港澳青年了解南沙特色文创产品!“南沙麒麟”正式亮相