91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

Lombok如何派上用場(chǎng)

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

掃碼添加小助手

加入工程師交流群

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

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

小型不可變對(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注解來(lái)創(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開(kāi)始,record將成為這些使用情況的最常見(jiàn)的方式。

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

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

然而,Lombok允許我們自定義名稱、訪問(wèn)級(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 是如何以一種非常方便的方式來(lái)創(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:來(lái)注釋我們的類。

@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來(lái)創(chuàng)建一個(gè)具有相同屬性的對(duì)象。

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

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

總而言之,record 對(duì)于較小的對(duì)象來(lái)說(shuō)是更好的。雖然,對(duì)于有很多字段的對(duì)象來(lái)說(shuō),缺乏創(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 受到限制的場(chǎng)景。

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

    關(guān)注

    8

    文章

    7335

    瀏覽量

    94757
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3001

    瀏覽量

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

    關(guān)注

    30

    文章

    4968

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    太子獻(xiàn)寶

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

    TEA加密解密分享!

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

    如何降低編程的難度

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Lombok的使用

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

    好評(píng)連連的充電器ic U6107D

    降噪耳機(jī)除了能夠擁有極佳的音質(zhì)表現(xiàn),優(yōu)秀的隔音效果也讓用途更加廣泛。不僅是音樂(lè)愛(ài)好者,就連商務(wù)人士等需要日常通勤的使用者都可派上用場(chǎng)
    的頭像 發(fā)表于 10-11 15:49 ?1414次閱讀