亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

普遍想法

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

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

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

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

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

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

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

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

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

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

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

Lombok應(yīng)運而生

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

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

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

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

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

1、jdk版本問題

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

2、開始營業(yè)

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

3、可讀性差

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

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

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

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

總結(jié)

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

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

相關(guān)文章

  • java實現(xiàn)Flappy Bird游戲源代碼

    java實現(xiàn)Flappy Bird游戲源代碼

    這篇文章主要為大家詳細介紹了java實現(xiàn)Flappy Bird游戲源代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java并發(fā)系列之CountDownLatch源碼分析

    Java并發(fā)系列之CountDownLatch源碼分析

    這篇文章主要為大家詳細介紹了Java并發(fā)系列之CountDownLatch源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • SpringBoot中使用@Value注解注入詳解

    SpringBoot中使用@Value注解注入詳解

    這篇文章主要介紹了SpringBoot中的@Value注入詳解,在SpringBoot中,@Value注解可以注入一些字段的普通屬性,并且會自動進行類型轉(zhuǎn)換,本文對這些類型進行總結(jié),需要的朋友可以參考下
    2023-08-08
  • Java中的System.getProperty()詳解

    Java中的System.getProperty()詳解

    System.getProperty("XXX")方法用來讀取JVM中的系統(tǒng)屬性,那么java 虛擬機中的系統(tǒng)屬性使用在運行java程序的時候java -D配置,有兩種方式,一種是在命令行配置另一種是在IDE中配置,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2023-09-09
  • 解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題

    解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題

    這篇文章主要介紹了解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Seata?AT模式啟動過程圖文示例詳解

    Seata?AT模式啟動過程圖文示例詳解

    這篇文章主要為大家介紹了Seata?AT模式啟動過程圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • java?Object類中常用API分享

    java?Object類中常用API分享

    Object類是java中所有類的祖宗類,因此java中所有的類的對象都可以直接使用Object類中提供的一些方法,下面小編為大家整理了Object類中常用API,希望對大家有所幫助
    2023-10-10
  • 詳解在spring boot中配置多個DispatcherServlet

    詳解在spring boot中配置多個DispatcherServlet

    本篇文章主要介紹了詳解在spring boot中配置多個DispatcherServlet,具有一定的參考價值,有興趣的可以了解一下。
    2017-03-03
  • Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    這篇文章主要介紹了Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • 舉例說明Java中代碼塊的執(zhí)行順序

    舉例說明Java中代碼塊的執(zhí)行順序

    這篇文章主要介紹了舉例說明Java中代碼塊的執(zhí)行順序,包括靜態(tài)屬性和非靜態(tài)屬性以及構(gòu)造函數(shù)等相關(guān)的執(zhí)行先后,需要的朋友可以參考下
    2015-07-07

最新評論