摘要:可標(biāo)注在類內(nèi)部生成一個(gè)名為類名的內(nèi)部類,用于快速構(gòu)建。流程是這樣的編譯源代碼,并生成語法樹尋找實(shí)現(xiàn)了的代碼,并調(diào)用。尋找被標(biāo)注了注解的類,修改生成的語法樹。將語法樹生成為字節(jié)碼就到這里了它還具備很多好用的功能,你可以去這里看看。
能做什么?
在使用lombok之前:
public class Book { private Integer id; private String title; private Date releaseDate; private Double price; private String[] authors; private String publisher; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getReleaseDate() { return releaseDate; } public void setReleaseDate(Date releaseDate) { this.releaseDate = releaseDate; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String[] getAuthors() { return authors; } public void setAuthors(String[] authors) { this.authors = authors; } public String getPublisher() { return publisher; } public void setPublisher(String publisher) { this.publisher = publisher; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Book)) return false; if (!super.equals(o)) return false; Book book = (Book) o; if (getId() != null ? !getId().equals(book.getId()) : book.getId() != null) return false; if (getTitle() != null ? !getTitle().equals(book.getTitle()) : book.getTitle() != null) return false; if (getReleaseDate() != null ? !getReleaseDate().equals(book.getReleaseDate()) : book.getReleaseDate() != null) return false; if (getPrice() != null ? !getPrice().equals(book.getPrice()) : book.getPrice() != null) return false; // Probably incorrect - comparing Object[] arrays with Arrays.equals if (!Arrays.equals(getAuthors(), book.getAuthors())) return false; return getPublisher() != null ? getPublisher().equals(book.getPublisher()) : book.getPublisher() == null; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (getId() != null ? getId().hashCode() : 0); result = 31 * result + (getTitle() != null ? getTitle().hashCode() : 0); result = 31 * result + (getReleaseDate() != null ? getReleaseDate().hashCode() : 0); result = 31 * result + (getPrice() != null ? getPrice().hashCode() : 0); result = 31 * result + Arrays.hashCode(getAuthors()); result = 31 * result + (getPublisher() != null ? getPublisher().hashCode() : 0); return result; } @Override public String toString() { return "Book{" + "id=" + id + ", title="" + title + """ + ", releaseDate=" + releaseDate + ", price=" + price + ", authors=" + Arrays.toString(authors) + ", publisher="" + publisher + """ + "}"; } }
在使用之后:
@Data public class Book { private Integer id; private String title; private Date releaseDate; private Double price; private String[] authors; private String publisher; }
并且從功能上,使用后=使用前。
說的簡單點(diǎn):從此以后不需要寫Getter、Setter、toString、hashCode、canEqual、constructor這些大部分相似,卻又不得不寫的代碼了。
一共有三個(gè)步驟
為你的開發(fā)工具安裝插件。
IntelliJ IDEA: settings->Plugins->Browse Repositories->搜索Lombok Plugin->install
Eclipse / MyEclipse / Spring Tool Suite / JBoss Developer Studio: 看這里
Netbeans: 看這里
下載并導(dǎo)入Jar包,下載地址
在需要的類上標(biāo)注注解
目前我使用的版本是1.16.16,有下面幾個(gè)常用注解:
@Date生成Getter、Setter、toString、equals、hashCode方法。
可標(biāo)注:Class
@Value生成Getter、toString、equals、hashCode、還有全字段的構(gòu)造方法。并且會(huì)將字段全都添加final。
可標(biāo)注:Class
@Builder在類內(nèi)部生成一個(gè)名為類名+Builder的內(nèi)部類,用于快速構(gòu)建。
可標(biāo)注:Class
你可以這樣使用它:
@Builder public class Book { private Integer id; private String title; private Date releaseDate; private Double price; private String[] authors; private String publisher; }
public static void main(String[] args) { Book book = Book.builder().id(1).title("書名").build(); }@Getter/@Setter
生成Getter或Setter方法。如果標(biāo)注在類上則會(huì)生成這個(gè)類中所有字段的Getter或Setter方法。
可標(biāo)注:Field,Class
@NonNull為你的構(gòu)造函數(shù)、Setter添加空值校驗(yàn)。標(biāo)注的字段賦值為空時(shí),會(huì)拋出NullPointerException。
可標(biāo)注:Field,Method,Parameter,Local Variable
為什么?自從Java 6起,Javac就支持了一個(gè)名叫JSR 269 Pluggable Annotation Processing API的規(guī)范,它的作用就是:如果你實(shí)現(xiàn)了這個(gè)API,在Javac編譯時(shí)就會(huì)得到調(diào)用。而lombok正是運(yùn)用了這一點(diǎn)。
流程是這樣的:
Javac編譯源代碼,并生成語法樹(AST)
Javac尋找實(shí)現(xiàn)了JSR 269 .... API的代碼(lombok),并調(diào)用。
lombok尋找被標(biāo)注了注解的類,修改Javac生成的語法樹(AST)。
Javac將語法樹生成為字節(jié)碼(.class)
就到這里了它還具備很多好用的功能,你可以去這里看看。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/70132.html
摘要:什么是一言以蔽之是一種工具,提供了簡單的注解來簡化我們的重復(fù)冗長代碼。但在實(shí)際的項(xiàng)目中,我們常常只在定義的時(shí)候用上,而在業(yè)務(wù)代碼中很少用到??偨Y(jié)是個(gè)非常有用的工具,能夠幫助我們精簡很多臃腫冗長的代碼,不過也有其局限性,推薦在定義中使用。 什么是Lombok 一言以蔽之:lombok是一種工具,提供了簡單的注解來簡化我們的重復(fù)冗長Java代碼。比如一個(gè)Java Bean,注解了lombo...
摘要:注意,其是在編譯源碼過程中,幫你自動(dòng)生成的。就是說,將極大減少你的代碼總量。注解和類似,區(qū)別在于它會(huì)把所有成員變量默認(rèn)定義為修飾,并且不會(huì)生成方法。不同的日志注解總結(jié)如下上面是注解,下面是編譯后的代碼參考資料下的安裝以及使用簡介注解介紹 Lombok有什么用 在我們實(shí)體Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不會(huì)用到,但是某些時(shí)候仍...
摘要:創(chuàng)建對象工具類設(shè)置父類設(shè)置屬性的使用范圍,如等,也可以設(shè)置屬性是否被修飾。所以顯示的是按鈕重啟。即使沒有重寫方法,依然可以調(diào)用,而且結(jié)果和重寫了方法一樣。最后奉上項(xiàng)目完整代碼后語以上就是我對插件的理解與使用,希望對你們有幫助。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人如有問題或建議,請后臺(tái)留言,我會(huì)盡力解決你的問題。 前言 上周去了開年會(huì),去的地方是溫泉度假村。老實(shí)說,我是無感的,90% 是因?yàn)闆]中...
摘要:還提供了全部參數(shù)的構(gòu)造函數(shù)的自動(dòng)生成,該注解的作用域也是只有在實(shí)體類上,因?yàn)橹挥袑?shí)體類才會(huì)存在構(gòu)造函數(shù)。當(dāng)然除了全部參數(shù)的構(gòu)造函數(shù),還提供了沒有參數(shù)的構(gòu)造函數(shù),使用方式與一致。 Lombok對于Java偷懶開發(fā)者來說應(yīng)該是比較中意的,恰恰筆者就是一個(gè)喜歡在小細(xì)節(jié)上偷懶來提高開發(fā)效率的人。所以在技術(shù)框架的海洋里尋找了很久才在GitHub開源平臺(tái)上找到,而在這之前國外很多程序猿一直使用該框...
閱讀 2027·2021-11-19 11:37
閱讀 715·2021-11-11 16:54
閱讀 1161·2021-11-02 14:44
閱讀 3049·2021-09-02 15:40
閱讀 2368·2019-08-30 15:44
閱讀 951·2019-08-29 11:17
閱讀 1059·2019-08-26 14:06
閱讀 1552·2019-08-26 13:47