最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

寧可用Lombok也不把成員設(shè)置為public原理解析

 更新時(shí)間:2023年03月05日 10:07:52   作者:哪吒編程  
這篇文章主要為大家介紹了寧可用Lombok也不把成員設(shè)置為public原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

思考一個(gè)問題,為何屬性是private,然后用get/set方法?

普遍想法

  • 大家都這么寫,我也這么寫;
  • 這是Java的封裝特性,你不知道?
  • 隱藏屬性,不暴露過多細(xì)節(jié),更安全;

下面系統(tǒng)的分析一下,why?

1、采用get/set方法其實(shí)是Java的一個(gè)協(xié)議,在1996年12月提出的java bean1.00-A,通過統(tǒng)一的規(guī)范可以設(shè)置對(duì)象的值(比如get、set方法)。很多框架也是在此基礎(chǔ)上開發(fā)的,底層源碼也都是通過get/set訪問屬性的。

2、很多時(shí)候,可以通過get/set方法,① 增加一些功能;② 增加一些特定的修改,比如打折;③ 增加一些訪問邏輯;④ 還可以通過set方法觸發(fā)一些事件。

3、如果你將一個(gè)屬性定義為public了,而且在50處調(diào)用了,此時(shí),產(chǎn)品經(jīng)理來了一個(gè)需求,將此次的促銷商品打五折;難道你要去修改這50處的代碼嗎?如果你用get/set封裝了,修改對(duì)應(yīng)屬性的set方法即可,so easy~!

4、就像上面所說,大家都這么寫,我也這么寫,但是,對(duì)于大多數(shù)企業(yè)應(yīng)用來說,直接將屬性寫成public,也是沒毛病。

5、也可以理解為,“風(fēng)格統(tǒng)一的代碼更好維護(hù)”。

6、假如我新接手一個(gè)項(xiàng)目,要用到某個(gè)bean,我也不知道都有什么屬性,一般的做法都是先new一個(gè),然后通過小數(shù)點(diǎn)聯(lián)想出來,如果沒有g(shù)et/set,那真的很煩躁。

7、現(xiàn)在都是面向接口編程,而Java接口中是不能定義普通的屬性的,但可以定義get/set方法。

來,一起回味一下封裝的概念。

封裝是指一個(gè)對(duì)象對(duì)其他對(duì)象隱藏其部分狀態(tài)和行為,而僅向程序其他部分暴露有限的接口的能力。封裝也叫作信息隱藏或者數(shù)據(jù)訪問保護(hù)。類通過暴露有限的訪問接口,授權(quán)外部?jī)H能通過類提供的方式(或者叫函數(shù))來訪問內(nèi)部信息或者數(shù)據(jù)。對(duì)于封裝這個(gè)特性,我們需要編程語言本身提供一定的語法機(jī)制來支持。這個(gè)語法機(jī)制就是訪問權(quán)限控制。

Lombok應(yīng)運(yùn)而生

為了解決get/set的代碼臃腫問題,Lombok應(yīng)運(yùn)而生。簡(jiǎn)單無腦,解決一切煩惱。

使用 Lombok 可以讓代碼更加簡(jiǎn)潔,減少冗余的代碼量。使用 Lombok 時(shí),可以使用注解來生成常用的代碼,如 getter、setter、equals、hashCode 和 toString 方法,這些方法通常都是在 Java 類中需要手動(dòng)編寫的。 使用 Lombok 可以省去這些手動(dòng)編寫的步驟,使代碼更加簡(jiǎn)潔。此外,使用 Lombok 還有一個(gè)好處是可以使用注解來生成構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù),這些構(gòu)造函數(shù)可以接受所有屬性作為參數(shù)。這樣就可以避免手動(dòng)編寫很多構(gòu)造函數(shù)的情況。因此,使用 Lombok 可以讓代碼更加簡(jiǎn)潔,減少冗余的代碼量,提高代碼的可讀性和可維護(hù)性。

Lombok代替public,因?yàn)閜ublic成員的可見性太大。將成員定義為public意味著任何地方都可以訪問這個(gè)成員,這可能會(huì)導(dǎo)致成員被意外地修改,從而影響類的穩(wěn)定性和正確性。而使用Lombok可以通過自動(dòng)生成getter和setter方法來保護(hù)成員的可見性,從而提高類的封裝性和可維護(hù)性。此外,使用Lombok還可以幫助開發(fā)人員減少編寫重復(fù)的代碼,提升工作效率。

因此,為了保護(hù)成員的可見性并提升代碼的可維護(hù)性,許多人寧可使用Lombok,也不愿意將類的成員設(shè)為public。

不和諧的聲音,禁止使用Lombok?

1、jdk版本問題

目前國(guó)內(nèi)大多數(shù)Java項(xiàng)目,采用的都是JDK1.8,因?yàn)樗鼔蚍€(wěn)定,功能也完全夠用,但是,如果哪一天,你的客戶心血來潮,就是想用JDK11,甚至JDK17,此時(shí),你會(huì)發(fā)現(xiàn)Lombok不好用了,于是,不得不將好幾百個(gè)實(shí)體類,通過idea生成get/set、equals、toString等方法,很煩躁。

2、開始營(yíng)業(yè)

當(dāng)你的客戶獲取到你的源代碼之后,他也想看看,運(yùn)行一下,此時(shí)發(fā)現(xiàn)沒安裝Lombok,報(bào)錯(cuò)了,安裝Lombok,不了解這是什么,還要去百度學(xué)習(xí)一下,被 迫營(yíng)業(yè),很煩躁。

3、可讀性差

  • Lombok隱藏了JavaBean的封裝細(xì)節(jié);
  • toString()不知道會(huì)打印什么;
  • @AllArgsConstructor提供一個(gè)全量構(gòu)造器, 讓外界在初始化時(shí),可以隨意修改其屬性,極其不安全。如果屬性過多,這個(gè)全量構(gòu)造器,看起來,很雞肋;
  • 參數(shù)的順序我們也無法控制,都是按照Lombok的心情來的;

4、使用Lombok,寫代碼的時(shí)候很爽,但它

  • 污染了你的代碼;
  • 玷污了Java語言的純粹;
  • 破壞了Java代碼的完整性、可讀性、安全性;
  • 增加了代碼的耦合度;
  • 增加了代碼的調(diào)試難度;

這是一種弊大于利、得不償失的操作。

總結(jié)

綜上所述,將成員變量定義為public是不可取的,使用Lombok也不是一個(gè)明智的選擇,還是老老實(shí)實(shí)的通過IDE生成get/set方法吧。

以上就是寧可用Lombok也不把成員設(shè)置為public原理解析的詳細(xì)內(nèi)容,更多關(guān)于Lombok public 成員設(shè)置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • jvm細(xì)節(jié)探索之synchronized及實(shí)現(xiàn)問題分析

    jvm細(xì)節(jié)探索之synchronized及實(shí)現(xiàn)問題分析

    這篇文章主要介紹了jvm細(xì)節(jié)探索之synchronized及實(shí)現(xiàn)問題分析,涉及synchronized的字節(jié)碼表示,JVM中鎖的優(yōu)化,對(duì)象頭的介紹等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Java中通過三級(jí)緩存解決Spring循環(huán)依賴詳解

    Java中通過三級(jí)緩存解決Spring循環(huán)依賴詳解

    這篇文章主要介紹了Java中通過三級(jí)緩存解決Spring循環(huán)依賴詳解,當(dāng)出現(xiàn)兩個(gè)或多個(gè) Bean 在初始化時(shí)相互依賴的情況時(shí),Spring Boot 會(huì)將其中一個(gè) Bean 提前暴露出來,以便其他 Bean 能夠在初始化時(shí)正確地引用它,這一策略能有效避免循環(huán)依賴導(dǎo)致的問題,需要的朋友可以參考下
    2023-09-09
  • SpringCloud之Hystrix的詳細(xì)使用

    SpringCloud之Hystrix的詳細(xì)使用

    熔斷機(jī)制是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制,當(dāng)扇出鏈路的某個(gè)微服務(wù)出錯(cuò)不可用或者響應(yīng)時(shí)間太長(zhǎng),會(huì)進(jìn)行服務(wù)的降級(jí),進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用,快速返回錯(cuò)誤的相應(yīng)信息,本文重點(diǎn)給大家介紹SpringCloud Hystrix使用,感興趣的朋友一起看看吧
    2022-01-01
  • 利用Mybatis?Plus實(shí)現(xiàn)一個(gè)SQL攔截器

    利用Mybatis?Plus實(shí)現(xiàn)一個(gè)SQL攔截器

    SQL攔截器是一種用于攔截和修改Mybatis執(zhí)行的SQL語句的工具,通過使用SQL攔截器,開發(fā)人員可以在執(zhí)行SQL語句之前或之后對(duì)其進(jìn)行修改或記錄,本文就來借助一下Mybatis-Plus實(shí)現(xiàn)一個(gè)SQL攔截器吧
    2023-05-05
  • java編寫創(chuàng)建數(shù)據(jù)庫和表的程序

    java編寫創(chuàng)建數(shù)據(jù)庫和表的程序

    這篇文章主要為大家詳細(xì)介紹了java編寫創(chuàng)建數(shù)據(jù)庫和表的程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java下界通配符(? super Type)的使用

    Java下界通配符(? super Type)的使用

    在Java中,? super Type是一個(gè)下界通配符,本文主要介紹了Java下界通配符(? super Type)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • java開發(fā)WMS倉庫商品預(yù)警需求示例解析

    java開發(fā)WMS倉庫商品預(yù)警需求示例解析

    這篇文章主要為大家介紹了java開發(fā)WMS倉庫商品預(yù)警需求示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • springcloud ribbon 饑餓加載原理解析

    springcloud ribbon 饑餓加載原理解析

    這篇文章主要介紹了springcloud ribbon 饑餓加載原理解析,饑餓加載特別適用于對(duì)啟動(dòng)性能要求較高的場(chǎng)景,如系統(tǒng)啟動(dòng)初期就有高并發(fā)請(qǐng)求的情況,感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2024-04-04
  • 解決mybatis竟然報(bào)Invalid value for getInt()的問題

    解決mybatis竟然報(bào)Invalid value for getInt()的問題

    使用mybatis遇到一個(gè)非常奇葩的問題,總是報(bào)Invalid value for getInt()的問題,怎么解決呢?下面小編通過場(chǎng)景分析給大家代來了mybatis報(bào)Invalid value for getInt()的解決方法,感興趣的朋友參考下吧
    2021-10-10
  • Java小程序計(jì)算圓周率代碼

    Java小程序計(jì)算圓周率代碼

    這篇文章主要介紹了Java小程序計(jì)算圓周率代碼,有兩種實(shí)現(xiàn)方法,喜歡的朋友可以參考下。
    2017-09-09

最新評(píng)論

灌阳县| 望奎县| 鄂州市| 沧州市| 若尔盖县| 绥江县| 青阳县| 金秀| 灵武市| 井冈山市| 汪清县| 东源县| 城步| 泌阳县| 万年县| 沙雅县| 安平县| 饶河县| 景谷| 浮山县| 金坛市| 珲春市| 云梦县| 阳高县| 井陉县| 呈贡县| 改则县| 嘉兴市| 邮箱| 石屏县| 乐清市| 普陀区| 濮阳县| 古田县| 洛南县| 九寨沟县| 台安县| 文登市| 隆安县| 克什克腾旗| 孝义市|