[TOC]
## 鏈式編程的原理
鏈式編程可以使得代碼可讀性高,鏈式編程的原理就是返回一個this對象,就是返回本身,達到鏈式效果,舉個例子,下面是一個學生bean。
```java
public class StudentBean {鏈式編程可以使得代碼可讀性高,鏈式編程的原理就是返回一個this對象,就是返回本身,達到鏈式效果,舉個例子,下面是一個學生bean
public class StudentBean {
private String name;
private int age;
public String getName() {
return name;
}
public StudentBean setName(String name) {
this.name = name;
return this;
}
public int getAge() {
return age;
}
public StudentBean setAge(int age) {
this.age = age;
return this;
}
}
```
這段代碼和傳統的Bean區別就是我在set屬性時候會返回一個this這樣就達到了鏈式編程的效果
```java
public static void main(String[] args) {
StudentBean studentBean = new StudentBean().setAge(22).setName("ly");
System.out.println(studentBean.getAge());
System.out.println(studentBean.getName());
}
```
lombok其實已經提供該style,我們把這個bean改成lombok實現只需要加上一個@Accessors(chain = true)即可
```java
@Accessors(chain = true)
@Getter
@Setter
public class StudentBean {
private String name;
private int age;
}
```
這樣代碼簡潔多了 ,而且實現了鏈式編程,那如何用lombok實現一個靜態的鏈式編程呢。
## 靜態鏈式編程
再回過頭來看剛剛的StudentBean,很多時候,我們去寫StudentBean這個bean的時候,他會有一些必輸字段,比如StudentBean中的name字段,一般處理的方式是將name字段包裝成一個構造方法,只有傳入name這樣的構造方法,才能創建一個StudentBean對象。
接上上邊的靜態構造方法和必傳參數的構造方法,使用lombok將更改成如下寫法(@RequiredArgsConstructor 和 @NonNull):
```java
@Accessors(chain = true)
@Getter
@Setter
@RequiredArgsConstructor(staticName = "of")
public class StudentBean {
@NonNull private String name;
private int age;
}
```
測試方法:
```java
public static void main(String[] args) {
StudentBean studentBean = StudentBean.of("ly").setAge(22);
System.out.println(studentBean.getAge());
System.out.println(studentBean.getName());
}
```
這樣不僅實現了鏈式編程,還實現了靜態創建,那么怎么實現一個builder模式的鏈式Bean呢。
## builder模式
build模式實現原理為在bean里面創建一個靜態builder方法和一個靜態內部Builder類,通過調用靜態builder方法來創建Builder類,然后通過builder類中的build方法直接創建一個Bean,具體如下:
```java
public class StudentBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static Builder builder() {
return new Builder();
}
public static class Builder{
private String name;
private int age;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public StudentBean build() {
StudentBean studentBean = new StudentBean();
studentBean.setName(name);
studentBean.setAge(age);
return studentBean;
}
}
}
```
測試方法:
```java
StudentBean studentBean = StudentBean.builder().name("ly").age(11).build();
```
這樣就實現了一個builder模式的鏈式bean,其實用lombok就一個注解的事情,調用與上面同樣
```java
@Builder
public class StudentBean {
private String name;
private int age;
}
```
### 使用Lombok Builder模式
添加`@Builder`注解修飾類即可
~~~
@Data
@Builder
public class VehicleLicenseBackSide {
String curbWeight;
String carNumber;
String tractionMass;
String authorizedCapacity;
String dimensions;
String totalMass;
String ileNumber;
String record;
String fuelType;
String approvedCapacity;
String remark;
String size;
}
~~~
- 簡介
- 更新說明
- 其他作品
- 第一部分 Java框架基礎
- 第一章 Java基礎
- 多線程實戰
- 嘗試一下Guava帶返回值的多線程處理類ListenableFuture
- LocalDate和Date有什么區別
- JAVA8接口增強實踐
- 第二章 Spring框架基礎
- MVC究竟是個啥?
- @ApiImplicitParam
- 七種方式,教你在SpringBoot初始化時搞點事情!
- Spring事務狀態
- maven
- Mybatis小總結
- mybatis-plus的使用
- 第三章 SpringSecurity實戰
- 基于SpringSecurity+jwt的用戶認證
- spring-security-oauth2
- 第四章 數據庫
- mysql
- mysql授權
- mysql數據庫三個關鍵性能指標--TPS\QPS\IOPS
- 梳理一下那些年Mysql的弱語法可能會踩的坑
- 關于Mysql的“字符串”數值的轉換和使用
- 憑這一文咱把事務講透
- Mysql性能優化
- 查詢性能優化
- 不常用的一些語法
- elasticsearch
- elasticsearch文檔操作
- 索引的基本操作
- java操作ElaticSearch
- elasticsearch中的各種查詢
- DB與ES混合應用可能存在的問題及解決方案探索
- 使用es必須要知道的一些知識點:索引篇
- Es中的日期操作
- MongoDB
- 入門篇(了解非關系型數據庫 NoSQL - MongoDB)
- 集群分片 (高級篇)
- 互聯網大廠的建表規范
- 第五章 中間件
- nginx
- nginx動靜分離配置,這個雷你踩過嗎?
- Canal
- Sharding-jdbc
- 水平分庫實踐
- kafka
- 第六章 版本管理
- git
- Not currently on any branch 情況提交版本
- 第七章 IO編程
- 第八章 JVM實戰調優
- jvisualvm
- jstat
- 第二部分 高級項目實戰篇
- 第一章 微信開發實戰
- 第二章 文件處理
- 使用EasyExcel處理導入導出
- 第三章 踩坑指南
- 郵件發送功能
- 第三部分 架構實戰篇
- 第一章 架構實戰原則
- 接口防止重復調用的一種方案
- 第二章 高并發緩存一致性管理辦法
- 第三章 異地多活場景下的數據同步之道
- 第四章 用戶體系
- 集成登錄
- auth-sso的管理
- 第五章 分庫分表場景
- 第六章 秒殺與高并發
- 秒殺場景
- 第七章 業務中臺
- 中臺的使用效果是怎樣的?
- 通用黑白名單方案
- 第八章 領域驅動設計
- 第十一章 微服務實戰
- Nacos多環境管理之道
- logback日志雙寫問題及Springboot項目正確的啟動方式
- 第四部分 優雅的代碼
- java中的鏈式編程
- 面向對象
- 開發原則
- Stream操作案例分享
- 注重性能的代碼
- 第五部分 談談成長
- 新手入門指北
- 不可不知的調試技巧
- 構建自己的知識體系
- 我是如何做筆記的
- 有效的提問
- 謹防思維定勢
- 學會與上級溝通
- 想清楚再去做
- 碎片化學習
- 第六部分 思維導圖(付費)
- 技術基礎篇
- 技術框架篇
- 數據存儲篇
- 項目實戰篇
- 第七部分 吾愛開源
- 7-1 麻雀聊天
- 項目啟動
- 前端登錄無請求問題解決
- websocket測試
- 7-2 ocp微服務框架
- evm框架集成
- 項目構建與集成
- zentao-center
- 二次開發:初始框架的搭建
- 二次開發:增加細分菜單、權限到應用
- 7-3 書棧網
- 項目啟動
- 源碼分析
- 我的書架
- 文章發布機制
- IM
- 第八章 團隊管理篇
- 大廠是怎么運作的
- 第九章 碼山有道
- 簡歷內推
- 聯系我內推
- 第十章 學點前端
- Vue