Android 使用Lombok插件的入門基本姿勢,為簡化而生

1.Lombok簡介

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

翻譯如下:Lombok是一個(gè)Java庫,能自動(dòng)插入編輯器并構(gòu)建工具,簡化Java開發(fā)。通過添加注解的方式,不需要為類編寫getter或eques方法,同時(shí)可以自動(dòng)化日志變量。

一句話:使用Lombok能以注解的方式簡化Java代碼,提高開發(fā)效率。


2.在AndroidStudio(以下簡稱‘AS’)中的使用

2.1 安裝Lombok插件

打開AS 的 File-Pligins 輸入 Lombok 進(jìn)行安裝,

第一次安裝需要重啟AS,安裝完重啟后就是以下畫面

2.2 加入依賴

①在app的build.gradle中加入以下依賴:

implementation 'org.projectlombok:lombok:1.16.18'? ?

implementation 'org.glassfish:javax.annotation:10.0-b28'

②在app的build.gradle中 的 defaultConfig 中添加以下內(nèi)容:

defaultConfig {

.....

? ? javaCompileOptions {

? ? ? ? annotationProcessorOptions {

? ? ? ? includeCompileClasspath true

? ? ? ? }

? ? }

}

2.3 基本使用

在類上添加注解@Data

@Data組合注解

@Data =? @Getter +? @Setter + @ToString + @EqualsAndHashCode

@Getter +? @Setter + @ToString + @EqualsAndHashCode

2.4 Lombok @Builder的使用

當(dāng)一個(gè)Bean參數(shù)過多,每次賦值都需要寫繁雜的set方法?

一般情況賦值

解決復(fù)雜的賦值方式:? @Builder的優(yōu)雅鏈?zhǔn)骄幊?/p>

1.通過在類上添加 @Builder+@NoArgsConstructor(無參構(gòu)造)+@AllArgsConstructor(全參構(gòu)造)

加入注解

2.? 通過 "類名.builder"構(gòu)建,記得最后需要調(diào)用build()方法結(jié)束。

@Builder使用

若編譯出現(xiàn)以下錯(cuò)誤:

解決方案:

在項(xiàng)目的根目錄下創(chuàng)建 lombok.config 配置文件,內(nèi)容為:

lombok.anyConstructor.suppressConstructorProperties=true

添加以上配置后成功編譯 運(yùn)行結(jié)果:

運(yùn)行結(jié)果

以上為Lombok的基本使用,注意:Lombok不支持多種參數(shù)構(gòu)造器的重載

以下為Lombok的注解詳細(xì)說明,可參考使用

@NonNull:給方法參數(shù)增加這個(gè)注解會(huì)自動(dòng)在方法內(nèi)對(duì)該參數(shù)進(jìn)行是否為空的校驗(yàn),如果為空,則拋出NPE(NullPointerException)

@Cleanup:自動(dòng)管理資源,用在局部變量之前,在當(dāng)前變量范圍內(nèi)即將執(zhí)行完畢退出之前會(huì)自動(dòng)清理資源,自動(dòng)生成try-finally這樣的代碼來關(guān)閉流

@Getter/@Setter:用在屬性上,再也不用自己手寫setter和getter方法了,還可以指定訪問范圍

@ToString:用在類上,可以自動(dòng)覆寫toString方法,當(dāng)然還可以加其他參數(shù),例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true, includeFieldNames=true)調(diào)用父類的toString方法,包含所有屬性

@EqualsAndHashCode:用在類上,自動(dòng)生成equals方法和hashCode方法

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在類上,自動(dòng)生成無參構(gòu)造和使用所有參數(shù)的構(gòu)造函數(shù)以及把所有@NonNull屬性作為參數(shù)的構(gòu)造函數(shù),如果指定staticName = “of”參數(shù),同時(shí)還會(huì)生成一個(gè)返回類對(duì)象的靜態(tài)工廠方法,比使用構(gòu)造函數(shù)方便很多

@Data:注解在類上,相當(dāng)于同時(shí)使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrutor這些注解,對(duì)于POJO類十分有用

@Value:用在類上,是@Data的不可變形式,相當(dāng)于為屬性添加final聲明,只提供getter方法,而不提供setter方法

@Builder:用在類、構(gòu)造器、方法上,為你提供復(fù)雜的builder APIs,讓你可以像如下方式一樣調(diào)用Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();

@SneakyThrows:自動(dòng)拋受檢異常,而無需顯式在方法上使用throws語句

@Synchronized:用在方法上,將方法聲明為同步的,并自動(dòng)加鎖,而鎖對(duì)象是一個(gè)私有的屬性$lock或$LOCK,而java中的synchronized關(guān)鍵字鎖對(duì)象是this,鎖在this或者自己的類對(duì)象上存在副作用,就是你不能阻止非受控代碼去鎖this或者類對(duì)象,這可能會(huì)導(dǎo)致競爭條件或者其它線程錯(cuò)誤

@Getter(lazy=true):可以替代經(jīng)典的Double Check Lock樣板代碼

@Log:根據(jù)不同的注解生成不同類型的log對(duì)象,但是實(shí)例名稱都是log,有六種可選實(shí)現(xiàn)類, 推薦使用 @Slf4j?

......


3.總結(jié)

這篇文章主要講解了在Android中Lombok的入門與使用。介紹了一些常用的lombok注解,大大簡化了我們的開發(fā)工作和代碼的簡潔性。當(dāng)然,lombok不支持多種參數(shù)構(gòu)造器的重載,看個(gè)人選擇使用。最后,我個(gè)人還是很推薦這款插件的,畢竟代碼還是推崇簡潔優(yōu)雅,可讀性高為主。

Lombok :

GitHub - rzwitserloot/lombok: Very spicy additions to the Java programming language.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容