一文詳解java如何實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用
從 Java 8 開(kāi)始,便引入了一種稱(chēng)為“流式 API”的編程風(fēng)格,當(dāng)然也被稱(chēng)為“鏈?zhǔn)皆O(shè)置”或“鏈?zhǔn)秸{(diào)用”。它主要是通過(guò)設(shè)置方法的返回值,讓返回值變?yōu)閷?duì)象自身,從而實(shí)現(xiàn)連續(xù)的方法調(diào)用,這種風(fēng)格就叫做“鏈?zhǔn)皆O(shè)置”或“鏈?zhǔn)秸{(diào)用”。
例如,以下代碼:
MySQLConnectOptions connectOptions = new MySQLConnectOptions() .setPort(3306) .setHost("127.0.0.1") .setDatabase("mydb") .setUser("root") .setPassword("root");
其屬性的設(shè)置就稱(chēng)為鏈?zhǔn)秸{(diào)用或鏈?zhǔn)皆O(shè)置。
1.鏈?zhǔn)秸{(diào)用優(yōu)點(diǎn)
使用鏈?zhǔn)秸{(diào)用主要有以下幾個(gè)優(yōu)點(diǎn):
- 簡(jiǎn)潔性:鏈?zhǔn)皆O(shè)置使得代碼更加簡(jiǎn)潔和易讀。通過(guò)連續(xù)的方法調(diào)用,可以在一行代碼中完成多個(gè)操作,減少了代碼的冗余和嵌套。
- 可讀性:鏈?zhǔn)皆O(shè)置可以提供更清晰、更自然的代碼流。每個(gè)方法調(diào)用都可以形成一個(gè)語(yǔ)義上的整體,使得代碼更易于理解。
- 可組合性:鏈?zhǔn)皆O(shè)置可以方便地組合多個(gè)操作。每個(gè)方法返回的是對(duì)象自身或包含對(duì)象自身的容器,使得可以連續(xù)地進(jìn)行多個(gè)操作,從而實(shí)現(xiàn)更復(fù)雜的功能。
- 可擴(kuò)展性:鏈?zhǔn)皆O(shè)置使得添加、修改或移除操作更加靈活。由于每個(gè)方法都是在對(duì)象自身上操作,并返回對(duì)象自身或包含對(duì)象自身的容器,可以輕松地添加新的操作或修改現(xiàn)有的操作。
總的來(lái)說(shuō),鏈?zhǔn)皆O(shè)置提高了代碼的可讀性和可組合性,使得代碼更加簡(jiǎn)潔、靈活和易于維護(hù)。
2.鏈?zhǔn)秸{(diào)用實(shí)現(xiàn)
鏈?zhǔn)秸{(diào)用的主要實(shí)現(xiàn)方式,總共有以下 4 種:
- Setter 原生方式
- Lombok @Accessors 注解方式
- Lombok @Builder 注解方式
- Hutool GenericBuilder 方式
具體實(shí)現(xiàn)如下。
2.1 Setter 原生方式
Setter 原生方式的實(shí)現(xiàn)比較簡(jiǎn)單,只需要設(shè)置 Setter 方法,并且每個(gè) Setter 方法都返回自身對(duì)象即可,如下代碼所示:
public class Student { private String name; private int age; public Student name(String name) { this.name = name; return this; } public Student age(int age) { this.age = age; return this; } }
鏈?zhǔn)秸{(diào)用代碼如下:
Student stu = new Student() .name("磊哥") .age(18);
2.2 Lombok @Accessors 注解方式
Lombok 是一個(gè) Java 庫(kù),它通過(guò)注解來(lái)簡(jiǎn)化 Java 代碼的編寫(xiě)。其中,@Accessors 注解可以開(kāi)啟鏈?zhǔn)秸{(diào)用風(fēng)格。
具體實(shí)現(xiàn)代碼如下:
@Getter @Setter @Accessors(chain = true) public class Student { private String name; private int age; }
在上面的示例中,使用了 @Accessors(chain = true) 注解來(lái)開(kāi)啟鏈?zhǔn)秸{(diào)用風(fēng)格。這樣就可以通過(guò)以下方式進(jìn)行鏈?zhǔn)皆O(shè)置:
Student stu = new Student() .setName("John") .setAge(30);
2.3 Lombok @Builder 注解方式
使用 @Builder 注解,會(huì)自動(dòng)生成一個(gè) Builder 類(lèi),通過(guò)該 Builder 類(lèi)可以鏈?zhǔn)降卦O(shè)置類(lèi)的屬性并創(chuàng)建對(duì)象。這種方式在構(gòu)建復(fù)雜對(duì)象時(shí)非常方便。
具體實(shí)現(xiàn)代碼如下:
import lombok.Builder; @Builder public class Student { private String name; private int age; }
鏈?zhǔn)秸{(diào)用代碼如下:
Student stu = Student.builder() .name("磊哥") .age(18) .build();
2.4 Hutool GenericBuilder 方式
Hutool 是一個(gè)小而全的 Java 工具類(lèi)庫(kù),通過(guò)靜態(tài)方法封裝,降低相關(guān) API 的學(xué)習(xí)成本,提高工作效率,使 Java 擁有函數(shù)式語(yǔ)言般的優(yōu)雅,讓 Java 語(yǔ)言也可以“甜甜的”。其中,Hutool 提供了 GenericBuilder 類(lèi),可以實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用,具體實(shí)現(xiàn)代碼如下:
Student stu = GenericBuilder.of(Student::new) .with(Student::setName, "磊哥") .with(Student::setAge, 18) .build();
小結(jié)
使用鏈?zhǔn)秸{(diào)用(也叫做鏈?zhǔn)皆O(shè)置)提高了代碼的可讀性和可組合性,使得代碼更加簡(jiǎn)潔、靈活和易于維護(hù)。而鏈?zhǔn)秸{(diào)用的常用實(shí)現(xiàn)方式有:原生 Setter 方式、Lombok 的 @Accessors 注解或 @Builder 注解實(shí)現(xiàn)方式,或者使用 Hutool 工具中提供的 GenericBuilder 類(lèi)都可以實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。
到此這篇關(guān)于一文詳解java如何實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用的文章就介紹到這了,更多相關(guān)java鏈?zhǔn)秸{(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot 2.0 整合sharding-jdbc中間件實(shí)現(xiàn)數(shù)據(jù)分庫(kù)分表
這篇文章主要介紹了SpringBoot 2.0 整合sharding-jdbc中間件,實(shí)現(xiàn)數(shù)據(jù)分庫(kù)分表,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-06-06Java線程池中的各個(gè)參數(shù)如何合理設(shè)置
這篇文章主要介紹了Java線程池中的各個(gè)參數(shù)如何合理設(shè)置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06MybatisPlus多表連接查詢(xún)的問(wèn)題及解決方案
MybatisPlus官方并沒(méi)有提供多表連接查詢(xún)的通用解決方案,然而連接查詢(xún)是相當(dāng)普遍的需求,今天通過(guò)本文給大家介紹下MybatisPlus多表連接查詢(xún)的問(wèn)題及解決方案,感興趣的朋友一起看看吧2022-01-01Java實(shí)現(xiàn)文件上傳到服務(wù)器本地并通過(guò)url訪問(wèn)的方法步驟
最近項(xiàng)目中使用到了文件上傳到服務(wù)器的功能,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)文件上傳到服務(wù)器本地并通過(guò)url訪問(wèn)的方法步驟,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過(guò)程解析
這篇文章主要介紹了Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringBoot結(jié)合prometheus自定義埋點(diǎn)方式
文章介紹了如何使用Spring Actuator、Prometheus和Grafana進(jìn)行度量統(tǒng)計(jì)收集、數(shù)據(jù)收集和數(shù)據(jù)展示,以監(jiān)控生成環(huán)境機(jī)器的性能指標(biāo)和業(yè)務(wù)數(shù)據(jù)指標(biāo)2024-12-12