AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

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

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

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

背景

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

在JAVA8的時代,開發(fā)者肯定都使用過Lombok庫,這個庫大大提升了我們的開發(fā)效率,少寫了很多代碼,但是它也存在很多問題,下面我來細細聊一下。XOW28資訊網(wǎng)——每日最新資訊28at.com

首先我們看下傳統(tǒng)意義上的定義一個類:XOW28資訊網(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后的代碼:XOW28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

讓我們詳細討論Record

一旦我們有了用戶Record類,我們就可以開始使用它了。XOW28資訊網(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());

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

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

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

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

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

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

記錄構(gòu)造器

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

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

我們可以在構(gòu)造函數(shù)中編寫自定義邏輯。XOW28資訊網(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");    }  }

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

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

比較Lombok和Record:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

有性能差異嗎?

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

結(jié)論:

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

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

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

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

下一篇: 面試官必問的分布式鎖面試題,你答得上來嗎?

標簽:
  • 熱門焦點
  • 6月iOS設備好評榜:第一蟬聯(lián)榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 28個SpringBoot項目中常用注解,日常開發(fā)、求職面試不再懵圈

    前言在使用SpringBoot開發(fā)中或者在求職面試中都會使用到很多注解或者問到注解相關(guān)的知識。本文主要對一些常用的注解進行了總結(jié),同時也會舉出具體例子,供大家學習和參考。注解
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發(fā)仿造稿定設計的圖片編輯器到現(xiàn)在,不知不覺已過去一年時間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 2023年,我眼中的字節(jié)跳動

    此時此刻(2023年7月),字節(jié)跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關(guān)注的互聯(lián)網(wǎng)公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 半導體需求下滑 三星電子DS業(yè)務部門今年營業(yè)虧損預計超10萬億韓元

    7月17日消息,據(jù)外媒報道,去年下半年開始的半導體需求下滑,影響到了三星電子、SK海力士、英特爾等諸多廠商,營收明顯下滑,部分廠商甚至出現(xiàn)了虧損。作為
  • 到手價3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
Top