日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

給正在使用Lombok的朋友一些建議

來(lái)源: 責(zé)編: 時(shí)間:2023-11-10 09:14:43 310觀看
導(dǎo)讀背景隨之Java 21正式發(fā)布。該版本是繼JDK 17之后最新的長(zhǎng)期支持版本(LTS),將獲得至少8年的支持!而SpringBoot3和Spring6的最低依賴(lài)就是JDK17了。在JAVA8的時(shí)代,開(kāi)發(fā)者肯定都使用過(guò)Lombok庫(kù),這個(gè)庫(kù)大大提升了我們的開(kāi)發(fā)效率,

vHk28資訊網(wǎng)——每日最新資訊28at.com

背景

隨之Java 21正式發(fā)布。該版本是繼JDK 17之后最新的長(zhǎng)期支持版本(LTS),將獲得至少8年的支持!而SpringBoot3和Spring6的最低依賴(lài)就是JDK17了。vHk28資訊網(wǎng)——每日最新資訊28at.com

在JAVA8的時(shí)代,開(kāi)發(fā)者肯定都使用過(guò)Lombok庫(kù),這個(gè)庫(kù)大大提升了我們的開(kāi)發(fā)效率,少寫(xiě)了很多代碼,但是它也存在很多問(wèn)題,下面我來(lái)細(xì)細(xì)聊一下。vHk28資訊網(wǎng)——每日最新資訊28at.com

首先我們看下傳統(tǒng)意義上的定義一個(gè)類(lèi):vHk28資訊網(wǎng)——每日最新資訊28at.com

public class User {    private String userName;    private String email;    private int userId;    public User(String username, String email, int userId) {        this.userName = userName;        this.email = email;        this.userId = userId;    }    public String getUserName() {        return username;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public int getUserId() {        return userId;    }    public void setUserId(int userId) {        this.userId = userId;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        User user = (User) o;        if (userId != user.userId) return false;        if (username != null ? !username.equals(user.userName) : user.userName != null) return false;        return email != null ? email.equals(user.email) : user.email == null;    }    @Override    public int hashCode() {        int result = userName != null ? userName.hashCode() : 0;        result = 31 * result + (email != null ? email.hashCode() : 0);        result = 31 * result + userId;        return result;    }    @Override    public String toString() {        return "User{" +                "userName='" + userName + '/'' +                ", email='" + email + '/'' +                ", userId=" + userId +                '}';    }}

而使用Lombok后的代碼:vHk28資訊網(wǎng)——每日最新資訊28at.com

import lombok.Data;@Datapublic class User {    private String userName;    private String email;    private int userId;}

@Data注解會(huì)自動(dòng)生成所有的getter函數(shù)、字段的所有setter函數(shù)、toString函數(shù)、構(gòu)造函數(shù)、hashCode和equals函數(shù)。vHk28資訊網(wǎng)——每日最新資訊28at.com

@Data 注釋結(jié)合了其他幾個(gè) Lombok 注釋?zhuān)?@Getter、@Setter、@EqualsAndHashCode 和 @toString。如果需要,我們還可以單獨(dú)使用這些注釋。vHk28資訊網(wǎng)——每日最新資訊28at.com

看上去是很美好,不是嗎?但是仔細(xì)思考下,會(huì)發(fā)現(xiàn)這些問(wèn)題:vHk28資訊網(wǎng)——每日最新資訊28at.com

  • 第三方依賴(lài):Lombok是一個(gè)第三方庫(kù),作為開(kāi)發(fā)人員,我們依賴(lài)第三方庫(kù)來(lái)完成這些瑣碎的事情。Lombok僅依靠社區(qū)支持來(lái)維護(hù)。如果隨著Java 版本的升級(jí)可能會(huì)存在不兼容性問(wèn)題或者該庫(kù)不受支持,則會(huì)導(dǎo)致代碼庫(kù)出現(xiàn)問(wèn)題。
  • IDE 兼容性: Lombok 依賴(lài)于編譯時(shí)的代碼生成,這可能并不總是與所有集成開(kāi)發(fā)環(huán)境 (IDE) 無(wú)縫協(xié)作。某些 IDE 可能不完全支持 Lombok 功能,從而導(dǎo)致難以識(shí)別和理解生成的代碼。

那么有什么好的替代方案嗎?Record了解一下?vHk28資訊網(wǎng)——每日最新資訊28at.com

什么是Record?vHk28資訊網(wǎng)——每日最新資訊28at.com

Record是 Java 中從 Java 14(作為預(yù)覽功能)開(kāi)始引入的新功能,并在Java 16中正式引入。Records提供了一種簡(jiǎn)潔的方法來(lái)定義主要用于封裝數(shù)據(jù)的簡(jiǎn)單類(lèi)。它們是一種類(lèi),可以根據(jù)類(lèi)的字段自動(dòng)生成常用方法,例如構(gòu)造函數(shù)、 equals()、hashCode()和。toString()vHk28資訊網(wǎng)——每日最新資訊28at.com

你看到 Record 和 Lombok 之間的相似之處了嗎?他們都在幫助我們實(shí)現(xiàn)同樣的目標(biāo)。vHk28資訊網(wǎng)——每日最新資訊28at.com

那么如何使用呢?vHk28資訊網(wǎng)——每日最新資訊28at.com

要使用 Record 定義上述 User 類(lèi),我們只需要這樣做。vHk28資訊網(wǎng)——每日最新資訊28at.com

public record UserRecord(String userName, String email, int userId) {}

就是這樣。只需一行代碼即可實(shí)現(xiàn)我們用 65 行傳統(tǒng)編碼和 5 行 Lombok 所做的事情。另外,我們不必依賴(lài)第三方庫(kù)。vHk28資訊網(wǎng)——每日最新資訊28at.com

一旦我們創(chuàng)建了上面的類(lèi),除了toString、hashCode和equals等類(lèi)級(jí)別的方法之外,Java內(nèi)部還定義了三個(gè)final變量及其getter方法。vHk28資訊網(wǎng)——每日最新資訊28at.com

讓我們?cè)敿?xì)討論Record

一旦我們有了用戶Record類(lèi),我們就可以開(kāi)始使用它了。vHk28資訊網(wǎng)——每日最新資訊28at.com

// Initialize the record.UserRecord userRecord = new UserRecord("test", "test@163.com", 1234);// get the propertiesSystem.out.println(userRecord.email());System.out.println(userRecord.toString());

請(qǐng)注意,getter 方法中沒(méi)有“get”關(guān)鍵字。我們需要直接使用變量名作為方法名。例如,getEmail()我們不是像傳統(tǒng)上那樣使用,而是在調(diào)用 Record 方法時(shí)使用email()。vHk28資訊網(wǎng)——每日最新資訊28at.com

一旦初始化,我們就無(wú)法設(shè)置 Record 的屬性值。所有變量都是最終的。這意味著記錄是不可變的vHk28資訊網(wǎng)——每日最新資訊28at.com

我們可以在記錄中定義實(shí)例和類(lèi)函數(shù)。我們可以定義靜態(tài)變量。我們不能定義實(shí)例變量。vHk28資訊網(wǎng)——每日最新資訊28at.com

// 類(lèi)(靜態(tài))變量  public static final String invalidEmailMessage = "INVALID EMAIL";  // 實(shí)例變量 - 不允許。會(huì)拋出錯(cuò)誤。  public String defaultEmail = "xxxxx@163.com";  // 類(lèi)函數(shù)  public static void sayMyName() {    System.out.println("zhangsan");  }  // 實(shí)例函數(shù)  public String emailDomain() {    return this.email.split("@")[1];  }
// 使用對(duì)象userRecord.emailDomain();// 使用 Class 調(diào)用靜態(tài)方法。UserRecord.sayMyName();

Record類(lèi)無(wú)法擴(kuò)展。所有 Record 類(lèi)都隱式擴(kuò)展 Record 類(lèi)。而且Java不允許多重繼承。因此我們的 Record 類(lèi)不能是任何其他類(lèi)的子類(lèi)。vHk28資訊網(wǎng)——每日最新資訊28at.com

默認(rèn)情況下,記錄也是最終記錄。因此我們不能將它們用作任何其他類(lèi)的父類(lèi)。vHk28資訊網(wǎng)——每日最新資訊28at.com

記錄構(gòu)造器

該記錄聲明了一個(gè)帶有所有參數(shù)的默認(rèn)構(gòu)造函數(shù)。這種類(lèi)型的構(gòu)造函數(shù)稱(chēng)為規(guī)范構(gòu)造函數(shù)。vHk28資訊網(wǎng)——每日最新資訊28at.com

public UserRecord(String username, String email, int userId) {    this.username = username;    this.email = email;    this.userId = userId;  }

我們可以在構(gòu)造函數(shù)中編寫(xiě)自定義邏輯。vHk28資訊網(wǎng)——每日最新資訊28at.com

public UserRecord(String username, String email, int userId) {    this.username = username;    this.email = email;    this.userId = userId;    if (userId < 1) {      throw new IllegalArgumentException("UserId can not be less than 1");    }  }

有一個(gè)很棒的功能,我們可以通過(guò)消除不必要的細(xì)節(jié)來(lái)創(chuàng)建一個(gè)緊湊的構(gòu)造函數(shù)。例如,上面具有自定義邏輯的規(guī)范構(gòu)造函數(shù)可以以緊湊的形式重寫(xiě)為:vHk28資訊網(wǎng)——每日最新資訊28at.com

public UserRecord {    if (userId < 1) {      throw new IllegalArgumentException("UserId can not be less than 1");    }  }

比較Lombok和Record:

功能vHk28資訊網(wǎng)——每日最新資訊28at.com

LombokvHk28資訊網(wǎng)——每日最新資訊28at.com

RecordvHk28資訊網(wǎng)——每日最新資訊28at.com

不變性vHk28資訊網(wǎng)——每日最新資訊28at.com

沒(méi)有vHk28資訊網(wǎng)——每日最新資訊28at.com

是的vHk28資訊網(wǎng)——每日最新資訊28at.com

可擴(kuò)展性vHk28資訊網(wǎng)——每日最新資訊28at.com

是的vHk28資訊網(wǎng)——每日最新資訊28at.com

沒(méi)有vHk28資訊網(wǎng)——每日最新資訊28at.com

樣板代碼vHk28資訊網(wǎng)——每日最新資訊28at.com

減少vHk28資訊網(wǎng)——每日最新資訊28at.com

減少vHk28資訊網(wǎng)——每日最新資訊28at.com

可讀性vHk28資訊網(wǎng)——每日最新資訊28at.com

可能會(huì)更難閱讀vHk28資訊網(wǎng)——每日最新資訊28at.com

更容易閱讀vHk28資訊網(wǎng)——每日最新資訊28at.com

穩(wěn)健性vHk28資訊網(wǎng)——每日最新資訊28at.com

不太穩(wěn)健vHk28資訊網(wǎng)——每日最新資訊28at.com

更堅(jiān)固vHk28資訊網(wǎng)——每日最新資訊28at.com

第三方依賴(lài)vHk28資訊網(wǎng)——每日最新資訊28at.com

是的vHk28資訊網(wǎng)——每日最新資訊28at.com

沒(méi)有vHk28資訊網(wǎng)——每日最新資訊28at.com

IDE 兼容性vHk28資訊網(wǎng)——每日最新資訊28at.com

不容易vHk28資訊網(wǎng)——每日最新資訊28at.com

簡(jiǎn)單vHk28資訊網(wǎng)——每日最新資訊28at.com

有性能差異嗎?

不會(huì)。就性能而言,使用Java記錄和Lombok注釋沒(méi)有顯著差異。兩者生成的代碼一旦編譯,在性能特征方面與手寫(xiě)代碼沒(méi)有什么不同。生成的代碼由 Java 編譯器優(yōu)化,因此幾乎沒(méi)有性能開(kāi)銷(xiāo)。vHk28資訊網(wǎng)——每日最新資訊28at.com

結(jié)論:

本文表明我們應(yīng)該使用記錄來(lái)編寫(xiě)更清晰、更具可讀性的代碼。記錄可以幫助我們減少樣板代碼,而無(wú)需任何第三方庫(kù)。Lombok 與 IDE 存在一些兼容性問(wèn)題。vHk28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-19894-0.html給正在使用Lombok的朋友一些建議

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: SpringBoot常用的50個(gè)注解,一目了然

下一篇: 面試官必問(wèn)的分布式鎖面試題,你答得上來(lái)嗎?

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 5月安卓手機(jī)好評(píng)榜:魅族20 Pro奪冠

    性能榜和性?xún)r(jià)比榜之后,我們來(lái)看最后的安卓手機(jī)好評(píng)榜,數(shù)據(jù)來(lái)源安兔兔評(píng)測(cè),收集時(shí)間2023年5月1日至5月31日,僅限國(guó)內(nèi)市場(chǎng)。第一名:魅族20 Pro好評(píng)率:97.50%不得不感慨魅族老品牌還
  • 六大權(quán)益!華為8月服務(wù)日開(kāi)啟:手機(jī)免費(fèi)貼膜、維修免人工費(fèi)

    8月5日消息,一年一度的華為開(kāi)發(fā)者大會(huì)2023(Together)日前在松山湖拉開(kāi)帷幕,與此同時(shí),華為8月服務(wù)日也式開(kāi)啟,到店可享六大專(zhuān)屬權(quán)益。華為用戶可在華為商城Ap
  • 把LangChain跑起來(lái)的三個(gè)方法

    使用LangChain開(kāi)發(fā)LLM應(yīng)用時(shí),需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過(guò)這個(gè)步驟先學(xué)習(xí)LLM模型的應(yīng)用,對(duì)Langchain進(jìn)行快速上手?本片講解3個(gè)把LangChain跑起來(lái)
  • 學(xué)習(xí)JavaScript的10個(gè)理由...

    作者 | Simplilearn編譯 | 王瑞平當(dāng)你決心學(xué)習(xí)一門(mén)語(yǔ)言的時(shí)候,很難選擇到底應(yīng)該學(xué)習(xí)哪一門(mén),常用的語(yǔ)言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個(gè)月我寫(xiě)過(guò)一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當(dāng)時(shí)用的是 GDIView + WinDbg 把問(wèn)題搞定,前者用來(lái)定位泄露資源,后者用來(lái)定位泄露代碼,后面有朋友反
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 2天漲粉255萬(wàn),又一賽道在抖音爆火

    來(lái)源:運(yùn)營(yíng)研究社作者 | 張知白編輯 | 楊佩汶設(shè)計(jì) | 晏談夢(mèng)潔這個(gè)暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個(gè)月超過(guò) 12 億;有的「博主」火了&m
  • 余承東:AI大模型技術(shù)的發(fā)展將會(huì)帶來(lái)下一代智能終端操作系統(tǒng)的智慧體驗(yàn)

    8月4日消息,2023年華為開(kāi)發(fā)者大會(huì)(HDC.Together)今天正式開(kāi)幕,華為發(fā)布HarmonyOS 4、全新升級(jí)的鴻蒙開(kāi)發(fā)套件、HarmonyOS Next開(kāi)發(fā)者預(yù)覽版本等一系列
  • Meta盲目擴(kuò)張致超萬(wàn)人被裁,重金押注元宇宙而前景未明

    圖片來(lái)源:圖蟲(chóng)創(chuàng)意日前,Meta創(chuàng)始人兼CEO 馬克&middot;扎克伯發(fā)布公開(kāi)信,宣布Meta計(jì)劃裁員超11000人,占其員工總數(shù)13%。他公開(kāi)承認(rèn)了自己的預(yù)判失誤:&ldquo;不僅
Top 主站蜘蛛池模板: 浮梁县| 平安县| 青海省| 江都市| 仁化县| 利辛县| 阆中市| 吉木乃县| 宕昌县| 灵璧县| 陆川县| 西峡县| 桓台县| 乌鲁木齐市| 巴里| 若羌县| 什邡市| 肇源县| 阳西县| 晋州市| 县级市| 甘肃省| 平阳县| 北川| 道真| 安西县| 丘北县| 墨玉县| 高安市| 上饶县| 思茅市| 碌曲县| 榆中县| 乌兰浩特市| 永靖县| 师宗县| 潜江市| 扬中市| 历史| 华亭县| 灵寿县|