Java - 五分鐘學會Lombok 用法 - 古古's Blog
文章推薦指數: 80 %
Lombok 是一個Java library,可以透過簡單的注解省略Java 的code,像是setter、getter、logger…等,目的在消除冗長的code 和提高開發效率.
Java-五分鐘學會Lombok用法
By古古
2020/03/04
Java
Lombok是一個Javalibrary,可以透過簡單的注解省略Java的code,像是setter、getter、logger…等,目的在消除冗長的code和提高開發效率
假設你在類上加上了一個@Getter和@Setter注解,那你就不用在寫煩人的getter和setter,lombok會自動幫你產生出來啦!
之所以加個lombok的@Getter注解就可以幫我們自動生成所有變量的getter,是因為lombok參與了Java在compile階段生成.class檔的過程,lombok會幫我們自動寫一堆getter,然後塞進.class檔,所以真正被編譯出來的User.class檔案,是包含完整的getter的
簡單的說,lombok可以算是一種語法糖,只是在幫我們增進開發效率而已,實際上所產生出來的.class檔仍然是完全正常的
安裝Lombok
要在project中使用lombok,除了要在maven中加入lombokdependency,還要安裝Intellijlombok插件
1.加入mavendependency
所以equals和hashcode要一起implement,免得發生違反Java規定的情形發生
4.@NoArgsConstructor,@AllArgsConstructor,@RequiredArgsConstructor
這三個很像,都是在自動生成該類的constructor,差別只在生成的constructor的參數不一樣而已
@NoArgsConstructor:生成一個沒有參數的constructor
@AllArgsConstructor:生成一個包含所有參數的constructor
這裡注意一個Java的小坑,當我們沒有指定constructor時,Javacompiler會幫我們自動生成一個沒有任何參數的constructor給該類,但是如果我們自己寫了constructor之後,Java就不會自動幫我們補上那個無參數的constructor了
然而很多地方(像是SpringDataJPA),會需要每個類都一定要有一個無參數的constructor,所以你在加上@AllArgsConstructor時,拜託,一定要補上@NoArgsConstrcutor,不然會有各種坑等著你
@AllArgsConstructor
@NoArgsConstructor
publicclassUser{
privateIntegerid;
privateStringname;
}
@RequiredArgsConstructor:生成一個包含“特定參數”的constructor,特定參數指的是那些有加上final修飾詞的變量們
補充一下,如果所有的變量都是正常的,都沒有用final修飾的話,那就會生成一個沒有參數的constructor
5.@Data
懶人包,只要加了@Data這個注解,等於同時加了以下注解
@Getter/@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
@Data是使用頻率最高的lombok注解,通常@Data會加在一個值可以被更新的Object上,像是日常使用的DTO們、或是JPA裡的Entity們,就很適合加上@Data注解,也就是@Dataformutableclass
6.@Value
也是懶人包,但是他會把所有的變量都設成final的,其他的就跟@Data一樣,等於同時加了以下注解
@Getter(注意沒有setter)
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
上面那個@Data適合用在POJO或DTO上,而這個@Value注解,則是適合加在值不希望被改變的類上,像是某個類的值當創建後就不希望被更改,只希望我們讀它而已,就適合加上@Value注解,也就是@Valueforimmutableclass
另外注意一下,此lombok的注解@Value和另一個Spring的注解@Value撞名,在import時不要import錯了
7.@Builder
自動生成流式set值寫法,從此之後再也不用寫一堆setter了
注意,雖然只要加上@Builder注解,我們就能夠用流式寫法快速設定Object的值,但是setter還是必須要寫不能省略的,因為Spring或是其他框架有很多地方都會用到Object的getter/setter對他們取值/賦值
所以通常是@Data和@Builder會一起用在同個類上,既方便我們流式寫code,也方便框架做事
@Data
@Builder
publicclassUser{
privateIntegerid;
privateStringname;
}
8.@Slf4j
自動生成該類的log靜態常量,要打日誌就可以直接打,不用再手動newlog靜態常量了
除了@Slf4j之外,lombok也提供其他日誌框架的變種注解可以用,像是@Log、@Log4j…等,他們都是幫我們創建一個靜態常量log,只是使用的library不一樣而已
@Log//對應的log語句如下
privatestaticfinaljava.util.logging.Loggerlog=java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j//對應的log語句如下
privatestaticfinalorg.apache.log4j.Loggerlog=org.apache.log4j.Logger.getLogger(LogExample.class);
SpringBoot默認支持的就是slf4j+logback的日誌框架,所以也不用再多做啥設定,直接就可以用在SpringBootproject上,log系列注解最常用的就是@Slf4j
延伸文章資訊
- 1Java Getter和Setter - 知乎专栏
在Java中,getter和setter是两种常规方法,用于检索和更新变量的值。 以下代码是带有私有变量和 ... 然后,使用方法将所有元素从数组复制 scr 到array ...
- 2Getter、Setter的用與不用 - iThome
在Java界,有個該不該使用Getter、Setter的老問題,不單是初學者經常覺得多此一舉,就連老手們偶而也會從封裝、維護、抽象化等角度,戰上數回。
- 3java中的setter()、getter()方法用法 - CSDN博客
JAVA中的setter//getter()方法用法public class Student { String name;public String getName() { return nam...
- 4java裏getter和setter的作用(轉載) - 程式人生
【java】類中使用getter和setter的優勢. http://www.importnew.com/9716.html. java有三大特性:封裝,繼承還有多態。 而今天,我來講一下其中最...
- 5[Java] 關於getter與setter | 羅倫斯的IT航海日誌 - - 點部落