從 Java 8 開(kāi)始,便引入了一種稱為“流式 API”的編程風(fēng)格,當(dā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è)置就稱為鏈?zhǔn)秸{(diào)用或鏈?zhǔn)皆O(shè)置。
使用鏈?zhǔn)秸{(diào)用主要有以下幾個(gè)優(yōu)點(diǎn):
總的來(lái)說(shuō),鏈?zhǔn)皆O(shè)置提高了代碼的可讀性和可組合性,使得代碼更加簡(jiǎn)潔、靈活和易于維護(hù)。
鏈?zhǔn)秸{(diào)用的主要實(shí)現(xiàn)方式,總共有以下 4 種:
具體實(shí)現(xiàn)如下。
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);
Lombok 是一個(gè) Java 庫(kù),它通過(guò)注解來(lái)簡(jiǎn)化 Java 代碼的編寫。其中,@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);
使用 @Builder 注解,會(huì)自動(dòng)生成一個(gè) Builder 類,通過(guò)該 Builder 類可以鏈?zhǔn)降卦O(shè)置類的屬性并創(chuàng)建對(duì)象。這種方式在構(gòu)建復(fù)雜對(duì)象時(shí)非常方便。
具體實(shí)現(xiàn)代碼如下:
import lombok.Builder;@Builderpublic class Student { private String name; private int age;}
鏈?zhǔn)秸{(diào)用代碼如下:
Student stu = Student.builder() .name("磊哥") .age(18) .build();
Hutool 是一個(gè)小而全的 Java 工具類庫(kù),通過(guò)靜態(tài)方法封裝,降低相關(guān) API 的學(xué)習(xí)成本,提高工作效率,使 Java 擁有函數(shù)式語(yǔ)言般的優(yōu)雅,讓 Java 語(yǔ)言也可以“甜甜的”。其中,Hutool 提供了 GenericBuilder 類,可以實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用,具體實(shí)現(xiàn)代碼如下:
Student stu = GenericBuilder.of(Student::new) .with(Student::setName, "磊哥") .with(Student::setAge, 18) .build();
使用鏈?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 類都可以實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。
本文鏈接:http://www.tebozhan.com/showinfo-26-45481-0.html被問(wèn)住了:如何實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用?
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com