新聞中心
原文如下:下面,結(jié)合我自己使用 Lombok 之后的感受,談?wù)?Lombok 帶來(lái)的幾大痛點(diǎn)。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),奉賢企業(yè)網(wǎng)站建設(shè),奉賢品牌網(wǎng)站建設(shè),網(wǎng)站定制,奉賢網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,奉賢網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
01JDK 版本問(wèn)題
當(dāng)我想要將現(xiàn)有項(xiàng)目的 JDK 從 Java 8 升級(jí)到 Java 11 時(shí),我發(fā)現(xiàn) Lombok 不能正常工作了。
于是我不得不將所有的 Lombok 注解從項(xiàng)目源代碼中清除,并使用 IDE 自帶的功能生成 getter/setter,equals,hashCode,toString 以及構(gòu)造器等方法,你也可以使用 Delombok 工具完成這一過(guò)程。但這終究會(huì)消耗你很多的時(shí)間。
我的反駁:很多公司一旦確定 JDK 版本在很長(zhǎng)的時(shí)間都不會(huì)改變(比如銀行項(xiàng)目很多都在用 JDK1.6,你問(wèn)他愿意升級(jí)到 JDK11 不?),現(xiàn)在都出到 14 版本了,你看有多少公司會(huì)升級(jí)!
如現(xiàn)在很多公司都在用 JDK1.8,任你出到 JDK14,我依然繼續(xù)使用 JDK1.8,等你出到 JDK20 時(shí)我相信 Lombok 肯定會(huì)支持更高的版本,那時(shí)兼容問(wèn)題將不存在。
02脅迫使用
當(dāng)你的源代碼中使用了 Lombok,恰好你的代碼又被其他的人所使用,那么依賴你代碼的人,也必須安裝 Lombok 插件 (不管他們喜不喜歡)。
同時(shí)還要花費(fèi)時(shí)間去了解 Lombok 注解的使用情況,如果不那么做,代碼將無(wú)法正常運(yùn)行。使用過(guò) Lombok 之后,我發(fā)現(xiàn)這是一種很流氓的行為。
我的反駁:你裝不裝 Lombok 插件不是你喜不喜歡,不是由你個(gè)人意愿決定的,這是工作,公司要求怎么做就要怎么做,這是規(guī)定。
Lombok 是一個(gè)非常簡(jiǎn)單的知識(shí)點(diǎn),十分鐘就能上手使用,你卻抱怨要花費(fèi)時(shí)間學(xué)習(xí),作為程序員不是無(wú)時(shí)無(wú)刻都在學(xué)習(xí)嗎,你有這種抱怨只能你放棄程序員這個(gè)工作吧!
03可讀性差
Lombok 隱藏了 JavaBean 封裝的細(xì)節(jié),如果你使用 @AllArgsConstructor 注解,它將提供一個(gè)巨型構(gòu)造器,讓外界有機(jī)會(huì)在初始化對(duì)象時(shí)修改類中所有的屬性。
首先,這是極其不安全的,因?yàn)轭愔心诚祵傩晕覀兪遣幌M恍薷牡摹?/p>
另外,如果某個(gè)類中有幾十個(gè)屬性存在,就會(huì)有一個(gè)包含幾十個(gè)參數(shù)的構(gòu)造器被 Lombok 注入到類中,這是不理智的行為。
其次,構(gòu)造器參數(shù)的順序完全由 Lombok 所以制,我們并不能操控,只有當(dāng)你需要調(diào)試時(shí)才發(fā)現(xiàn)有一個(gè)奇怪的 “小強(qiáng)” 在等著你。
最后,在運(yùn)行代碼之前,所有 JavaBean 中的方法你只能想象他們長(zhǎng)什么樣子,你并不能看見(jiàn)。
我的反駁:不滿意 @AllArgsConstructor 的做法你可以使用 @Builder 啊,這個(gè)支持你任意順序任意數(shù)量的創(chuàng)建對(duì)象,你不了解 Lombok 的其他用法就說(shuō)它不好。
你要看 JavaBean 中的方法?它有啥好看的,Getter 和 Setter 方法有啥好看的,你不知道 Getter 和 Setter 方法長(zhǎng)什么樣嗎?實(shí)在不明白有什么好看的?
04代碼耦合度增加
當(dāng)你使用 Lombok 來(lái)編寫某一個(gè)模塊的代碼后,其余依賴此模塊的其他代碼都需要引入 Lombok 依賴,同時(shí)還需要在 IDE 中安裝 Lombok 的插件。
雖然 Lombok 的依賴包并不大,但就因?yàn)槠渲幸粋€(gè)地方使用了 Lombok,其余所有的依賴方都要強(qiáng)制加入 Lombok 的 Jar 包,這是一種入侵式的耦合,如果再遇上 JDK 版本問(wèn)題,這將是一場(chǎng)災(zāi)難。
我的反駁:我們?cè)谑褂闷渌蚣軙r(shí),那框架引入了不計(jì)其數(shù)的包,現(xiàn)在要引入一個(gè)很小的包都在斤斤計(jì)較,Lombok 這么好用,幾乎所有項(xiàng)目都會(huì)使用到,這還需要強(qiáng)制引入嗎,我們自覺(jué)的都會(huì)在 maven 的 parent 依賴中統(tǒng)一引入了。
05得不償失
使用 Lombok,一時(shí)覺(jué)得很爽,但它卻污染了你的代碼,破壞了 Java 代碼的完整性,可讀性和安全性,同時(shí)還增加的團(tuán)隊(duì)的技術(shù)債務(wù),這是一種弊大于利,得不償失的操作。
如果你確實(shí)想讓自己的代碼更加精煉,同時(shí)又兼顧可讀性和編碼效率,不妨使用主流的 Scala 或 Kotlin 這一基于 JVM 的語(yǔ)言。
我的反駁:破壞了完整性?加上臃腫的 Getter&Setter 你卻嫌棄臃腫,不加你又說(shuō)破壞代碼的完整性,你想怎么做。增加團(tuán)隊(duì)的技術(shù)債務(wù)?學(xué)個(gè) Lombok 十分鐘的事情,有什么好增加的。
要使用 Kotlin?一般公司都沒(méi)有這么激進(jìn)吧,現(xiàn)在 Kotlin 很多配套東西在企業(yè)中使用還不成熟吧。
作者:Java 實(shí)用技術(shù)
編輯:陶家龍
出處:toutiao.com/i6884399145390440964
網(wǎng)站標(biāo)題:CTO說(shuō)禁用Lombok,看我懟死他!
本文URL:http://fisionsoft.com.cn/article/dpgiodi.html


咨詢
建站咨詢
