Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

序言各位好啊,我是會編程的蝸牛,作為java開發者 , 我們平常在開發過程中,總是希望能夠盡量少敲代碼 。這一方面,當然是為了偷懶,另一方面,當然也是為了代碼看起來更加簡潔一點,不斷往編程規范上靠 。然后其中有一個插件或者說依賴吧,就是lombok,它的出現真可謂程序員的福音啊 。只要用了這個東西,我們再也不用寫那一大堆重復的但確實必須的代碼了 。雖然我們也可以用IDEA自動生成這些東西 , 但總歸麻煩啊 。一旦這個類的屬性做了一些調整,還得重新修改對應的setter/getter方法等 。當然,今天不是來說lombok的好的,而是想和各位探索一下這個東西存在的一些坑,防止大家踩坑,這個坑就讓我來踩一下吧~問題再現首先,我們新建一個Dog的類,里面有name和year的屬性,然后加上注解@Data,然后進行編譯,可以看到class文件里面自動生成了很多代碼 。 

Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
 
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
里面我數了一下,一共生成了6種類型的代碼,有【空構造方法】、【Get/Set方法】、【equals方法】、【canEqual】、【hashCode】、【toString】方法 , 我們想要的和不想要的,通過給我們生成了 。 事情到這里本來是可以結束了,但是我們的java實在太博大精深了,區區這點注解,還不能完全生成所有的代碼 。平常最常用的應該就是@Data注解了,但是其實還有好多其他的注解 , 比如@Builder , 這是一個可以生成有參構造函數的注解,剛才生成的一般也能夠滿足我們的需求了,但是對于需要設置有參構造函數的情況 , 只用@Data就不夠了 。那我們看下使用@Builder , 生成的代碼是怎么樣的 。 
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
  
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
可以看到,一共生成了3個大的代碼,一個是有參構造函數,一個是靜態方法,一個是靜態類 。那么 , 如果我們要使項目同時生成這些代碼呢?大家可能會說,把兩個注解都加上唄 。那么,我們來試一下 。  
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
 
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
可以看到,雖然生成的代碼有所增加 , 但少了一個關鍵的無參構造方法,這可是一個很關鍵的構造方法,在好的框架里都會調用這個無參構造方法的 。如果沒有,肯定會報一大堆錯誤的 。 那么,我們該怎么做呢?解決方法
然少了一個空構造方法,我們手動加一個 。但結果卻出乎我們的意料 , 編譯報錯了 ??磥磉@種方式是不可行的 。  
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
然剛才那種方式不同,我們可以給剛才那個空構造方法,再加一個注解 , 這個注解是@Tolerate,有了這個注解 , 可以讓lombok在處理的時候,直接忽略這個構造方法,我們來看下效果 ??梢钥吹缴傻腸lass文件里面 , 已經有空構造方法了 。 
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
 
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
么,還有其他的方式嗎?答案是肯定 。我們可以使用@RequiredArgsConstructor 來構建含有參數的,用@NoArgsConstructor來構建沒有參數的 , 而舍棄@Builder 。如圖,也同時生成了有參和無參的構造方法 。 
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
 
Lombok好用是好用,就是容易踩坑,這份避坑指南請查收

文章插圖
總結lombok雖然大大簡化了我們的開發,但還是得注意其中那些注解的問題,不然一不小心就容易掉進這種坑里 。可以多看看編譯出來的class文件,這樣能更好的理解這個框架 。 推薦閱讀 點擊標題可跳轉Tabby,一款老外都在用的 SSH工具 , 竟然還支持網頁操作IDEA 調試起來太費勁?你需要了解這幾招! 

推薦閱讀