一、簡單說明一下@Data注解的功能與使用方法:
1、@Data可以為類提供讀寫功能,從而不用寫get、set方法。
2、他還會為類提供 equals()、hashCode()、toString() 方法。
二、為什么無法使用?
因為他需要安裝一個叫 “lombox” 插件,以Idea為例:
1、打開:“File --> setting --> plugins” 搜索 Lombok
2、同時要在maven依賴中添加:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency>
3、重啟Idea
三、但是不推薦使用lombok,為什么?
下面是選自知乎上的一篇文章,下面有鏈接。
下面,結合我自己使用Lombok之后的感受,談談Lombok帶來的幾大痛點。
1. JDK版本問題
當我想要將現有項目的JDK從Java 8升級到Java 11時,我發現Lombok不能正常工作了。於是我不得不將所有的Lombok注解從項目源代碼中清除,並使用IDE自帶的功能生成getter/setter,equals,hashCode,toString以及構造器等方法,你也可以使用Delombok工具完成這一過程。但這終究會消耗你很多的時間。
2. 脅迫使用
當你的源代碼中使用了Lombok,恰好你的代碼又被其他的人所使用,那么依賴你代碼的人,也必須安裝Lombok插件(不管他們喜不喜歡),同時還要花費時間去了解Lombok注解的使用情況,如果不那么做,代碼將無法正常運行。使用過Lombok之后,我發現這是一種很流氓的行為。
3. 可讀性差
Lombok隱藏了JavaBean封裝的細節,如果你使用@AllArgsConstructor注解,它將提供一個巨型構造器,讓外界有機會在初始化對象時修改類中所有的屬性。首先,這是極其不安全的,因為類中某系屬性我們是不希望被修改的;另外,如果某個類中有幾十個屬性存在,就會有一個包含幾十個參數的構造器被Lombok注入到類中,這是不理智的行為;其次,構造器參數的順序完全由Lombok所控制,我們並不能操控,只有當你需要調試時才發現有一個奇怪的“小強”在等着你;最后,在運行代碼之前,所有JavaBean中的方法你只能想象他們長什么樣子,你並不能看見。
4. 代碼耦合度增加
當你使用Lombok來編寫某一個模塊的代碼后,其余依賴此模塊的其他代碼都需要引入Lombok依賴,同時還需要在IDE中安裝Lombok的插件。雖然Lombok的依賴包並不大,但就因為其中一個地方使用了Lombok,其余所有的依賴方都要強制加入Lombok的Jar包,這是一種入侵式的耦合,如果再遇上JDK版本問題,這將是一場災難。
5. 得不償失
使用Lombok,一時覺得很爽,但它卻污染了你的代碼,破壞了Java代碼的完整性,可讀性和安全性,同時還增加的團隊的技術債務,這是一種弊大於利,得不償失的操作。如果你確實想讓自己的代碼更加精煉,同時又兼顧可讀性和編碼效率,不妨使用主流的Scala或Kotlin這一基於JVM的語言。
來自知乎:https://zhuanlan.zhihu.com/p/146659383
還有一篇:https://www.cnblogs.com/grey-wolf/p/11812528.html