Java編碼輔助工具Lombok用法詳解
前言
在項目開發(fā)過程中,經(jīng)常會涉及到一些調(diào)整很少但又必不可少的環(huán)節(jié),比如實體類的Getter/Setter方法,ToString方法等。這時可以使用Lombok來避免這種重復(fù)的操作,減少非核心代碼的臃腫,提高編碼效率。
如何在IntelliJ IDEA中引入Lombok
安裝Lombok 插件(否則在調(diào)用setter/getter方法時IDE會提示報錯): File -> Settings -> Plugins 搜索Lombok Plugin完成安裝。
pom.xml中引入lombok依賴(其中<scope>provided</scope>表示只在編譯、測試階段依賴該jar,運行階段不依賴(如運行容器中已包含了該jar,則置為provided避免jar沖突),默認<scope>compile</scope>則表示在編譯、測試、運行階段都依賴):
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency>
Lombok注解用途
@Getter/@Setter
為字段生成Getter和Setter方法,可以注解到字段或者類上(注解在類上會為類中所有字段生成Getter和Setter方法)。默認是public類型的,如果需要的話可以修改方法的訪問級別: @Getter(AccessLevel.PROTECTED)
Lombok中的注解一般都會包含一個無參構(gòu)造函數(shù)注解@NoArgsConstructor(用于生成無參構(gòu)造函數(shù)) ,所以還會額外生成一個無參構(gòu)造函數(shù)
@NonNull
調(diào)用字段的setter方法時,如果傳的參數(shù)為null,則會拋出空異常NullPointerException,生成setter方法時會檢查參數(shù)是否為空
@NoArgsConstructor
生成一個無參構(gòu)造方法。當(dāng)類中有final字段沒有被初始化時,編譯器會報錯,此時可用@NoArgsConstructor(force = true),然后就會為沒有初始化的final字段設(shè)置默認值 0 / false / null, 這樣編譯器就不會報錯。對于具有約束的字段(例如@NonNull字段),不會生成檢查或分配,因此請注意,正確初始化這些字段之前,這些約束無效。
@RequiredArgsConstructor
生成構(gòu)造方法(可能帶參數(shù)也可能不帶參數(shù)),如果帶參數(shù),這參數(shù)只能是以final修飾的未經(jīng)初始化的字段,或者是以@NonNull注解的未經(jīng)初始化的字段。
@RequiredArgsConstructor(staticName = “of”)會生成一個of()的靜態(tài)方法,并把構(gòu)造方法設(shè)置為私有的
@AllArgsConstructor
生成一個全參數(shù)的構(gòu)造方法
@ToString
生成toString()方法,默認情況下它會按順序(以逗號分隔)打印你的類名稱以及每個字段??梢赃@樣設(shè)置不包含哪些字段,可以指定一個也可以指定多個@ToString(exclude = “id”) / @ToString(exclude = {“id”,”name”}) 。如果繼承的有父類的話,可以設(shè)置callSuper 讓其調(diào)用父類的toString()方法,例如:@ToString(callSuper = true)
@EqualsAndHashCode
生成hashCode()和equals()方法,默認情況下,它將使用所有非靜態(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修飾, 同時還包含@ToString、@EqualsAndHashCode、
@AllArgsConstructor 、@Getter(注意只有Getter沒有Setter)
@Log
生成log對象,用于記錄日志,可以通過topic屬性來設(shè)置getLogger(String name)方法的參數(shù) 例如 @Log4j(topic = “com.xxx.service.xxx”),默認是類的全限定名,即 類名.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
@Log private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName()); @Log4j private static final Logger log = org.apache.log4j.Logger.Logger.getLogger(UserService.class); @Log4j2 private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class); @Slf4j private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class); @XSlf4j private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class); @CommonsLog private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class); @JBossLog private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@SneakyThrows
使用try catch 修飾方法,來捕獲異常, 默認捕獲的是Throwable異常,也可以設(shè)置要捕獲的異常:@SneakyThrows(InterruptedException.class)
@Synchronized
給方法加上同步鎖
@Cleanup
主要用來修飾 IO 流相關(guān)類, 會在 finally 代碼塊中對該資源進行 close();
@Getter(lazy = true)
標(biāo)注字段為懶加載字段,懶加載字段在創(chuàng)建對象時不會進行初始化,而是在第一次訪問的時候才會初始化,后面再次訪問也不會重復(fù)初始化
@Wither
提供了給final字段賦值的一種方法
@Builder
為你的類生成復(fù)雜的構(gòu)建器API。
@Delegate
為List類型的字段生成一大堆常用的方法,其實這些方法都是List中的方法 。注意:一個類中只能使用一個@Delegate注解,因為使用多個會生成多個size()方法,從而會編譯報錯。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot RestTemplate設(shè)置超時時間的方法(Spring boot
這篇文章主要介紹了Springboot RestTemplate設(shè)置超時時間的方法,包括Spring boot 版本<=1.3和Spring boot 版本>=1.4,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-08-08Collections工具類_動力節(jié)點Java學(xué)院整理
Collections工具類提供了大量針對Collection/Map的操作。這篇文章主要介紹了Collections工具類_動力節(jié)點Java學(xué)院整理,需要的朋友可以參考下2017-04-04maven無法依賴spring-cloud-stater-zipkin的解決方案
這篇文章主要介紹了maven無法依賴spring-cloud-stater-zipkin如何解決,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05Spring Boot實戰(zhàn)之逐行釋義Hello World程序
spring boot 是基于Spring的一個框架,Spring boot幫我們集成很多常用的功能,使得整個配置更加簡單。這篇文章主要介紹了Spring Boot實戰(zhàn)之逐行釋義Hello World,需要的朋友可以參考下2017-12-12