Java中Lombok常用注解分享
以前的Java項(xiàng)目中充斥了太多不友好的代碼:POJO的Getter/Setter/toString等等,這些代碼由于沒(méi)有什么技術(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è)注解,而不是分開(kāi)使用?
答:在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)造器。另外,如果所有的屬性都沒(méi)有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的,所以沒(méi)有@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實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法
這篇文章主要介紹了java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法,實(shí)例分析了java基于SMTP服務(wù)發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
spring boot 中設(shè)置默認(rèn)網(wǎng)頁(yè)的方法
這篇文章主要介紹了spring boot 中設(shè)置默認(rèn)網(wǎng)頁(yè)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Springboot 中使用 Aop代碼實(shí)戰(zhàn)教程
AOP的編程思想是把對(duì)類對(duì)象的橫切問(wèn)題點(diǎn),從業(yè)務(wù)邏輯中分離出來(lái),從而達(dá)到解耦的目的,增加代碼的復(fù)用性,提高開(kāi)發(fā)效率,這篇文章主要介紹了Springboot中使用Aop代碼實(shí)戰(zhàn)教程,需要的朋友可以參考下2023-07-07
Java基礎(chǔ)知識(shí)之Java語(yǔ)言概述
這篇文章主要介紹了Java基礎(chǔ)知識(shí)之Java語(yǔ)言概述,本文介紹了Java語(yǔ)言相關(guān)的基礎(chǔ)知識(shí)、歷史介紹、主要應(yīng)用方向等內(nèi)容,需要的朋友可以參考下2015-03-03
Spring基于AspectJ的AOP開(kāi)發(fā)案例解析
這篇文章主要介紹了Spring的基于AspectJ的AOP開(kāi)發(fā),AspectJ是一個(gè)基于Java語(yǔ)言的AOP框架,使用AspectJ需要導(dǎo)入Spring?AOP和AspectJ相關(guān)jar包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
Springboot?上傳文件或頭像(MultipartFile、transferTo)
本文主要介紹了Springboot?上傳文件或頭像(MultipartFile、transferTo),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
java實(shí)現(xiàn)Redisson看門狗機(jī)制
redission看門狗機(jī)制是解決分布式鎖的續(xù)約問(wèn)題,本文就來(lái)詳細(xì)的介紹一下java實(shí)現(xiàn)Redisson看門狗機(jī)制,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09
maven利用tomcat插件部署遠(yuǎn)程Linux服務(wù)器的步驟詳解
Maven已經(jīng)是Java的項(xiàng)目管理常用方式,下面這篇文章主要給大家介紹了關(guān)于maven利用tomcat插件部署遠(yuǎn)程Linux服務(wù)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
@DynamicUpdate //自動(dòng)更新updatetime的問(wèn)題
這篇文章主要介紹了@DynamicUpdate //自動(dòng)更新updatetime的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

