溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java的Lombok使用方法是什么

發(fā)布時(shí)間:2021-11-19 16:04:48 來源:億速云 閱讀:132 作者:iii 欄目:編程語言

這篇文章主要介紹“Java的Lombok使用方法是什么”,在日常操作中,相信很多人在Java的Lombok使用方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java的Lombok使用方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

前言

在項(xiàng)目開發(fā)過程中,經(jīng)常會(huì)涉及到一些調(diào)整很少但又必不可少的環(huán)節(jié),比如實(shí)體類的Getter/Setter方法,ToString方法等。這時(shí)可以使用Lombok來避免這種重復(fù)的操作,減少非核心代碼的臃腫,提高編碼效率。

如何在IntelliJ IDEA中引入Lombok

安裝Lombok 插件(否則在調(diào)用setter/getter方法時(shí)IDE會(huì)提示報(bào)錯(cuò)): File -> Settings -> Plugins 搜索Lombok Plugin完成安裝。

pom.xml中引入lombok依賴(其中<scope>provided</scope>表示只在編譯、測試階段依賴該jar,運(yùn)行階段不依賴(如運(yùn)行容器中已包含了該jar,則置為provided避免jar沖突),默認(rèn)<scope>compile</scope>則表示在編譯、測試、運(yùn)行階段都依賴):

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.20</version><scope>provided</scope></dependency>

Lombok注解用途

@Getter/@Setter

為字段生成Getter和Setter方法,可以注解到字段或者類上(注解在類上會(huì)為類中所有字段生成Getter和Setter方法)。默認(rèn)是public類型的,如果需要的話可以修改方法的訪問級別: @Getter(AccessLevel.PROTECTED)

Lombok中的注解一般都會(huì)包含一個(gè)無參構(gòu)造函數(shù)注解@NoArgsConstructor(用于生成無參構(gòu)造函數(shù)) ,所以還會(huì)額外生成一個(gè)無參構(gòu)造函數(shù)

@NonNull

調(diào)用字段的setter方法時(shí),如果傳的參數(shù)為null,則會(huì)拋出空異常NullPointerException,生成setter方法時(shí)會(huì)檢查參數(shù)是否為空

@NoArgsConstructor

生成一個(gè)無參構(gòu)造方法。當(dāng)類中有final字段沒有被初始化時(shí),編譯器會(huì)報(bào)錯(cuò),此時(shí)可用@NoArgsConstructor(force = true),然后就會(huì)為沒有初始化的final字段設(shè)置默認(rèn)值 0 / false / null, 這樣編譯器就不會(huì)報(bào)錯(cuò)。對于具有約束的字段(例如@NonNull字段),不會(huì)生成檢查或分配,因此請注意,正確初始化這些字段之前,這些約束無效。

@RequiredArgsConstructor

生成構(gòu)造方法(可能帶參數(shù)也可能不帶參數(shù)),如果帶參數(shù),這參數(shù)只能是以final修飾的未經(jīng)初始化的字段,或者是以@NonNull注解的未經(jīng)初始化的字段。

@RequiredArgsConstructor(staticName = “of”)會(huì)生成一個(gè)of()的靜態(tài)方法,并把構(gòu)造方法設(shè)置為私有的

@AllArgsConstructor

生成一個(gè)全參數(shù)的構(gòu)造方法

@ToString

生成toString()方法,默認(rèn)情況下它會(huì)按順序(以逗號分隔)打印你的類名稱以及每個(gè)字段??梢赃@樣設(shè)置不包含哪些字段,可以指定一個(gè)也可以指定多個(gè)@ToString(exclude = “id”) / @ToString(exclude = {“id”,”name”}) 。如果繼承的有父類的話,可以設(shè)置callSuper 讓其調(diào)用父類的toString()方法,例如:@ToString(callSuper = true)

@EqualsAndHashCode

生成hashCode()和equals()方法,默認(rèn)情況下,它將使用所有非靜態(tài),非transient字段。但可以通過在可選的exclude參數(shù)中來排除更多字段?;蛘撸ㄟ^在of參數(shù)中命名它們來準(zhǔn)確指定希望使用哪些字段。

// exclude 排除字段 @EqualsAndHashCode(exclude = {“password”, “salt”})// of 指定要包含的字段 @EqualsAndHashCode(of = {“id”, “phone”, “password”})

@Data

@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

@Value

@Value 將字段都變成不可變類型:使用final修飾, 同時(shí)還包含@ToString、@EqualsAndHashCode、

@AllArgsConstructor 、@Getter(注意只有Getter沒有Setter)

@Log

生成log對象,用于記錄日志,可以通過topic屬性來設(shè)置getLogger(String name)方法的參數(shù) 例如 @Log4j(topic = “com.xxx.service.xxx”),默認(rèn)是類的全限定名,即 類名.class,log支持以下幾種:

@Log java.util.logging.Logger  @Log4j org.apache.log4j.Logger  @Log4j2 org.apache.logging.log4j.Logger  @Slf4j org.slf4j.Logger  @XSlf4j org.slf4j.ext.XLogger  @CommonsLog org.apache.commons.logging.Log  @JBossLog org.jboss.logging.Logger

@Logprivate static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());@Log4jprivate static final Logger log = org.apache.log4j.Logger.Logger.getLogger(UserService.class);@Log4j2private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);@Slf4jprivate static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);@XSlf4jprivate static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);@CommonsLogprivate static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);@JBossLogprivate static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);

@SneakyThrows

使用try catch 修飾方法,來捕獲異常, 默認(rèn)捕獲的是Throwable異常,也可以設(shè)置要捕獲的異常:@SneakyThrows(InterruptedException.class)

@Synchronized

給方法加上同步鎖

@Cleanup

主要用來修飾 IO 流相關(guān)類, 會(huì)在 finally 代碼塊中對該資源進(jìn)行 close();

@Getter(lazy = true)

標(biāo)注字段為懶加載字段,懶加載字段在創(chuàng)建對象時(shí)不會(huì)進(jìn)行初始化,而是在第一次訪問的時(shí)候才會(huì)初始化,后面再次訪問也不會(huì)重復(fù)初始化

@Wither

提供了給final字段賦值的一種方法

@Builder

為你的類生成復(fù)雜的構(gòu)建器API。

@Delegate

為List類型的字段生成一大堆常用的方法,其實(shí)這些方法都是List中的方法 。注意:一個(gè)類中只能使用一個(gè)@Delegate注解,因?yàn)槭褂枚鄠€(gè)會(huì)生成多個(gè)size()方法,從而會(huì)編譯報(bào)錯(cuò)。

到此,關(guān)于“Java的Lombok使用方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI