99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Lombok如何派上用場

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 15:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Java的 record 關(guān)鍵字是Java 14中引入的一個(gè)新的語義特性。record 對(duì)于創(chuàng)建小型不可變的對(duì)象非常有用。另一方面,Lombok 是一個(gè)Java庫,可以自動(dòng)生成一些已知的模式為Java字節(jié)碼。盡管它們都可以用來減少模板代碼,但它們是不同的工具。因此,我們應(yīng)該在特定情況下使用更適合我們需求的工具。

在這篇文章中,我們將探討各種使用情況,包括java record 的一些限制。對(duì)于每個(gè)例子,我們將看到Lombok如何派上用場,并比較這兩種解決方案。

小型不可變對(duì)象

我們的第一個(gè)例子,將使用Color對(duì)象。一個(gè)Color由三個(gè)整數(shù)值組成,分別代表紅、綠、藍(lán)三個(gè)通道。此外,一個(gè)顏色會(huì)暴露出它的十六進(jìn)制表示。例如,RGB(255,0,0)的顏色將有一個(gè)#FF0000 的十六進(jìn)制表示。此外,如果兩種顏色具有相同的RGB值,我們希望它們是相等的。

由于這些原因,在這種情況下選擇 record 是非常合理的。

public record ColorRecord(int red, int green, int blue) {
 
    public String getHexString() {
        return String.format("#%02X%02X%02X", red, green, blue);
    }
}

同樣地,Lombok允許我們使用@Value注解來創(chuàng)建不可變的對(duì)象。

@Value
public class ColorValueObject {
    int red;
    int green;
    int blue;

    public String getHexString() {
        return String.format("#%02X%02X%02X", red, green, blue);
    }
}

然而,從Java 14開始,record將成為這些使用情況的最常見的方式。

透明的數(shù)據(jù)載體

根據(jù)JDK增強(qiáng)建議(JEP 395),record 是作為不可變數(shù)據(jù)的透明載體的類。例如,我們不能強(qiáng)迫前面例子中的ColorRecord只暴露hexString而完全隱藏三個(gè)整數(shù)字段。

然而,Lombok允許我們自定義名稱、訪問級(jí)別和獲取器的返回類型。讓我們相應(yīng)地更新ColorValueObject

@Value
@Getter(AccessLevel.NONE)
public class ColorValueObject {
    int red;
    int green;
    int blue;

    public String getHexString() {
        return String.format("#%02X%02X%02X", red, green, blue);
    }
}

因此,如果我們需要不可變的數(shù)據(jù)對(duì)象,record 是一個(gè)很好的解決方案。

然而,如果我們想隱藏成員字段,只暴露使用它們進(jìn)行的一些操作,Lombok會(huì)更適合。

有許多字段的類

我們已經(jīng)看到了record 是如何以一種非常方便的方式來創(chuàng)建小型、不可變的對(duì)象的。讓我們看看如果數(shù)據(jù)模型需要更多的字段,record 會(huì)是什么樣子。在這個(gè)例子中,讓我們考慮Student的數(shù)據(jù)模型。

public record StudentRecord(
  String name, 
  Long studentId, 
  String email, 
  String phoneNumber, 
  String address, 
  String country, 
  int age) {
}

我們已經(jīng)可以猜到,StudentRecord的實(shí)例化將很難閱讀和理解,尤其是如果有些字段不是強(qiáng)制性的。

StudentRecord john = new StudentRecord(
  "John", null, "xxxx@qq.com", null, null, "sh", 20);

為了方便這些使用,Lombok提供了一個(gè)[Builder設(shè)計(jì)模式](/creational-design-patterns#builder)的實(shí)現(xiàn)。

為了使用它,我們只需要用@Builder:來注釋我們的類。

@Getter
@Builder
public class StudentBuilder {
    private String name;
    private Long studentId;
    private String email;
    private String phoneNumber;
    private String address;
    private String country;
    private int age;
}

現(xiàn)在,讓我們使用StudentBuilder來創(chuàng)建一個(gè)具有相同屬性的對(duì)象。

StudentBuilder john = StudentBuilder.builder()
  .name("John")
  .email("xxx@qq.com")
  .country("sh")
  .age(20)
  .build();

如果我們對(duì)兩者進(jìn)行比較,我們可以注意到,使用構(gòu)建器模式是有利的,可以帶來更干凈的代碼。

總而言之,record 對(duì)于較小的對(duì)象來說是更好的。雖然,對(duì)于有很多字段的對(duì)象來說,缺乏創(chuàng)建模式會(huì)使Lombok的@Builder成為更好的選擇。

可變數(shù)據(jù)

我們可以使用java record 專門處理不可變的數(shù)據(jù)。如果上下文需要一個(gè)可變的java對(duì)象,我們可以使用Lombok的@Data對(duì)象代替:

@Data 
    @AllArgsConstructor 
    public class ColorData {

        private int red; 
        private int green; 
        private int blue;

        public String getHexString() { 
            return String.format("#%02X%02X%02X", red, green, blue); 
        }

    }

一些框架可能需要帶有設(shè)置器或默認(rèn)構(gòu)造函數(shù)的對(duì)象。例如,Hibernate就屬于這種類型。當(dāng)創(chuàng)建一個(gè)@Entity時(shí),我們必須使用Lombok的注解或純Java。

繼承性

Java record 不支持繼承。因此,它們不能被擴(kuò)展或繼承其他類。另一方面,Lombok的@Value對(duì)象可以擴(kuò)展其他類,但它們是最終的。

@Value
public class MonochromeColor extends ColorData {
    
    public MonochromeColor(int grayScale) {
        super(grayScale, grayScale, grayScale);
    }
}

此外,@Data對(duì)象既可以擴(kuò)展其他類,也可以被擴(kuò)展??傊?,如果我們需要繼承,我們應(yīng)該堅(jiān)持使用Lombok的解決方案。

結(jié)論

在這篇文章中,我們已經(jīng)看到Lombok和java records是不同的工具,有不同的用途。此外,我們發(fā)現(xiàn)Lombok更加靈活,它可以用于record 受到限制的場景。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7257

    瀏覽量

    91936
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109942
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70794
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    太子獻(xiàn)寶

    `為期兩個(gè)月的“奔跑吧2016,資源跨年季”,抽中的工具箱獎(jiǎng)品今天收到了,上午收到獎(jiǎng)品下午就提著工具箱出門干活了,正好派上用場,工具箱看起來小巧金龍,挺適合外出維修帶上,感覺這個(gè)工具箱非常不錯(cuò)`
    發(fā)表于 02-15 21:34

    TEA加密解密分享!

    不知道大家玩兒過沒,我感覺涉及到安全問題的時(shí)候,會(huì)派上用場。算法原理沒去研究,現(xiàn)在只知道怎么用,還沒用在單片機(jī)上,僅僅是在vc下模擬過。算法是移植的,模擬的代碼是自己寫的。代碼里面有注釋,幫助大家使用。vc模擬TEA加密解密.zip (209.98 KB )
    發(fā)表于 10-15 04:37

    如何降低編程的難度

    平時(shí)學(xué)習(xí),無論哪行的知識(shí)都要看一遍。學(xué)多學(xué)少都沒關(guān)系。 比如我自己,連財(cái)會(huì)也看過,盡管我是學(xué)理科的。沒想到竟然能派上用場。 語文數(shù)學(xué)是萬物的基礎(chǔ)知識(shí),要永遠(yuǎn)保持在80分以上,點(diǎn)高點(diǎn)低都看這個(gè)。
    發(fā)表于 06-08 18:18

    IMS馬達(dá)&軟件&控制器及培訓(xùn)資料.part1

    工廠內(nèi)部的一些資料,資料有點(diǎn)老,不知道能不能派上用場。
    發(fā)表于 03-15 14:51 ?3次下載

    IMS馬達(dá)&軟件&控制器及培訓(xùn)資料.part2

    工廠內(nèi)部的一些資料,資料有點(diǎn)老,不知道能不能派上用場
    發(fā)表于 03-15 14:50 ?3次下載

    IMS馬達(dá)&軟件&控制器及培訓(xùn)資料.part3

    工廠內(nèi)部的一些資料,資料有點(diǎn)老,不知道能不能派上用場。
    發(fā)表于 03-15 14:50 ?1次下載

    九寨溝地區(qū)發(fā)生7.0級(jí)地震,生命探測儀靠什么原理幫助尋人?

    突發(fā)事件尋人服務(wù)是尋人的延伸。最初開發(fā)時(shí),我們希望它最好不要派上用場,但如果需要,它能第一時(shí)間發(fā)揮作用。 你們的平安,是今日的頭條。
    發(fā)表于 08-09 08:56 ?4494次閱讀

    工業(yè)物聯(lián)網(wǎng)的發(fā)展得到了哪些技術(shù)的輔助

    網(wǎng)絡(luò)系統(tǒng)是未來智能工廠的基礎(chǔ),但成敗取決于數(shù)據(jù)收集、處理和分析能力,這就是機(jī)器視覺派上用場的時(shí)候了。
    發(fā)表于 09-23 08:58 ?653次閱讀

    物聯(lián)網(wǎng)在教育行業(yè)可以如何派上用場

    通過將物聯(lián)網(wǎng)集成到教室中,教師可以使用語音或手勢(shì)命令遠(yuǎn)程管理教室,與遠(yuǎn)程位置的學(xué)生建立通信,收集學(xué)生對(duì)特定主題的寶貴反饋,并為特殊學(xué)生提供幫助。
    發(fā)表于 04-26 14:43 ?1491次閱讀

    3D打印技術(shù)或?qū)⒃诤I巷L(fēng)力發(fā)電機(jī)建設(shè)中派上用場

    南極熊導(dǎo)讀:海上風(fēng)力發(fā)電機(jī)的葉片制造、基座建設(shè),3D打印技術(shù)或?qū)⒖梢?b class='flag-5'>派上用場。 GE Renewables的Haliade-X風(fēng)力發(fā)電渦輪機(jī)的葉片直徑超過兩個(gè)足球場,已經(jīng)是世界上尺寸最大、功率最大
    的頭像 發(fā)表于 01-04 09:41 ?2283次閱讀

    Lombok開發(fā)插件使用小技巧

    0x01:Lombok簡介 Lombok 是一款 Java開發(fā)插件,使得 Java 開發(fā)者可以通過其定義的一些注解來消除業(yè)務(wù)工程中冗長和繁瑣的代碼,尤其對(duì)于簡單的 Java 模型對(duì)象(POJO)。在
    的頭像 發(fā)表于 06-12 18:07 ?2052次閱讀

    重演自己如何掉入Lombok的戲法陷阱

    ? https://www.ramostear.com/blog/2020/04/28/uk1860p8.html ? 如果您正在閱讀此文,想必您對(duì)Project Lombok已經(jīng)有了一段時(shí)間的了解
    的頭像 發(fā)表于 10-28 11:29 ?1324次閱讀

    Lombok同時(shí)使用@Data和@Builder的一個(gè)必須要避開的巨坑

    問題背景 Lombok @Data和@Builder分別單獨(dú)分析用法 解決方法 方法一 方法二 Lombok原理 總結(jié) 問題背景 Lombok使? 同時(shí)使?@Data和@Builder ,構(gòu)建無參
    的頭像 發(fā)表于 10-11 18:14 ?2375次閱讀

    在LTspice仿真軟件中如何使用FFT進(jìn)行頻譜分析

    在瞬態(tài)分析中,可以像示波器一樣確認(rèn)時(shí)間變化中的信號(hào)電平。而如果想確認(rèn)信號(hào)中的頻率,F(xiàn)FT 功能將派上用場,通過仿真模擬可以確認(rèn)電路的失真和噪聲成分。
    的頭像 發(fā)表于 02-06 13:45 ?1.1w次閱讀

    Lombok的使用

    在平時(shí)我們工作的時(shí)候,我們經(jīng)常會(huì)使用 toString() 方法來輸出一個(gè)對(duì)象的一些屬性信息。Lombok 給我們提供了一個(gè)自動(dòng)生成 toString() 代碼的注解,可以減少代碼行數(shù),如果代碼屬性
    的頭像 發(fā)表于 09-25 14:03 ?1198次閱讀