Java中Lombok常用注解分享
以前的Java項(xiàng)目中充斥了太多不友好的代碼:POJO的Getter/Setter/toString等等,這些代碼由于沒有什么技術(shù)含量,影響了代碼的美觀等缺點(diǎn),讓Lombok應(yīng)運(yùn)而生。
Our-task介紹
本篇博客是我的github上項(xiàng)目our-task:一個(gè)完整的清單管理系統(tǒng)的配套教程文檔,大家感興趣的話,可以去看看
安裝Lombok
加入Maven依賴
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
IDEA中安裝Lombok插件
依次點(diǎn)擊:FIle-Settings-Plugins,從插件欄中搜索Lombok進(jìn)行安裝,安裝之后勾選Lombok啟動(dòng)即可。
注解介紹
@Getter和@Setter
放在類上,為該類的所有屬性自動(dòng)生成Getter和Setter方法
import lombok.Getter; import lombok.Setter; /** * @program: our-task * @description: 學(xué)生類 * @author: water76016 * @create: 2020-12-15 10:57 **/ @Getter @Setter public class Student { int id; String name; int age; }
@ToString
自動(dòng)重寫toString方法,和我們平時(shí)使用IDEA編輯器自動(dòng)生成的一樣
/** * @program: our-task * @description: 學(xué)生類 * @author: water76016 * @create: 2020-12-15 10:57 **/ @ToString public class Student { int id; String name; int age; }
@EqualsAndHashCode
自動(dòng)生成equal(Object other)和hashCode()方法,如果某些變量不想要加入該注解,可以使用exclude進(jìn)行排除
import lombok.EqualsAndHashCode; @EqualsAndHashCode public class Student { int id; String name; int age; }
import lombok.EqualsAndHashCode; //把name屬性排除在外 @EqualsAndHashCode(exclude = "name") public class Student { int id; String name; int age; }
問(wèn):為什么把生成equal(Object other)和hashCode()方法弄成一個(gè)注解,而不是分開使用?
答:在Java中有規(guī)定:當(dāng)兩個(gè)對(duì)象相等時(shí),它們的hashcode是一定相等的。但是,當(dāng)兩個(gè)對(duì)象的hashcode相同,對(duì)象不一定相等。這樣做是為了防止違反Java規(guī)定的情況發(fā)生。
@NoArgsConstructor
生成一個(gè)不包含任何參數(shù)的無(wú)參構(gòu)造器
import lombok.NoArgsConstructor; @NoArgsConstructor public class Student { int id; String name; int age; }
@AllArgsConstructor
生成一個(gè)包含所有參數(shù)的構(gòu)造器
import lombok.AllArgsConstructor; @AllArgsConstructor public class Student { int id; String name; int age; }
@RequiredArgsConstructor
為“特定參數(shù)”生成構(gòu)造器,這里的“特定參數(shù)”,特指那些加上final修飾詞的屬性
import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class Student { int id; final String name; int age; public static void main(String[] args) { Student student = new Student("33"); } }
這里我們只為name加上final修飾,可以發(fā)現(xiàn),我們只生成了一個(gè)包含name屬性的構(gòu)造器。另外,如果所有的屬性都沒有final修飾的話,使用@RequiredArgsConstructor會(huì)生成一個(gè)無(wú)參的構(gòu)造器。
@Data
這是一個(gè)組合注解,加了這個(gè)注解,相當(dāng)于加入了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor這五個(gè)注解。
@Value
這也是一個(gè)組合注解,但是會(huì)把所有的變量都設(shè)置為final的,其他的就和@Data一樣了。等同于加入了@Getter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor這四個(gè)注解(由于所有屬性是final的,所以沒有@setter注解了)。
@Builder
流式的set值寫法,不過(guò)畢竟是給屬性賦值,基本的setter還是需要有的,一般來(lái)說(shuō),@Builder會(huì)和@Data一起使用。
import lombok.Builder; import lombok.Data; @Builder @Data public class Student { int id; String name; int age; public static void main(String[] args) { Student student = Student.builder().id(1).name("water").age(18).build(); } }
@Slf4j
自動(dòng)生成該類的log靜態(tài)常量,就可以直接打印日志了,不用去new一個(gè)log的靜態(tài)常量了。
@Slf4j public class Student { int id; String name; int age; public static void main(String[] args) { log.info("hello world"); } }
以上就是Java中Lombok常用注解分享的詳細(xì)內(nèi)容,更多關(guān)于Java Lombok常用注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在java List中進(jìn)行模糊查詢的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇在java List中進(jìn)行模糊查詢的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11SSH框架網(wǎng)上商城項(xiàng)目第14戰(zhàn)之商城首頁(yè)UI的設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第14戰(zhàn)之商城首頁(yè)UI的設(shè)計(jì),感興趣的小伙伴們可以參考一下2016-06-06java理論基礎(chǔ)Stream管道流狀態(tài)與并行操作
這篇文章主要為大家介紹了java理論基礎(chǔ)Stream管道流狀態(tài)與并行操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解
這篇文章主要介紹了Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10java 中的static關(guān)鍵字和final關(guān)鍵字的不同之處
java 中的static關(guān)鍵字和final關(guān)鍵字的不同之處,需要的朋友可以參考一下2013-03-03Java并發(fā)工具之CyclicBarrier使用詳解
這篇文章主要介紹了Java并發(fā)工具之CyclicBarrier使用詳解,CyclicBarrier是一個(gè)同步器,允許一組線程相互之間等待,直到到達(dá)某個(gè)公共屏障點(diǎn)(common barrier point),再繼續(xù)執(zhí)行,需要的朋友可以參考下2023-12-12Spring?Boot接口支持高并發(fā)具體實(shí)現(xiàn)代碼
這篇文章主要給大家介紹了關(guān)于Spring?Boot接口支持高并發(fā)具體實(shí)現(xiàn)的相關(guān)資料,在SpringBoot項(xiàng)目中通常我們沒有處理并發(fā)問(wèn)題,但是使用項(xiàng)目本身還是支持一定的并發(fā)量,需要的朋友可以參考下2023-08-08Fluent Mybatis實(shí)現(xiàn)環(huán)境隔離和租戶隔離
我們?cè)趯?shí)際的業(yè)務(wù)開發(fā)中,經(jīng)常會(huì)碰到環(huán)境邏輯隔離和租戶數(shù)據(jù)邏輯隔離的問(wèn)題。本文就詳細(xì)的來(lái)介紹一下,感興趣的小伙伴們可以參考一下2021-08-08