在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Lombok如何派上用場

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-08 15:39 ? 次閱讀

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

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

小型不可變對象

我們的第一個例子,將使用Color對象。一個Color由三個整數值組成,分別代表紅、綠、藍三個通道。此外,一個顏色會暴露出它的十六進制表示。例如,RGB(255,0,0)的顏色將有一個#FF0000 的十六進制表示。此外,如果兩種顏色具有相同的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注解來創建不可變的對象。

@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將成為這些使用情況的最常見的方式。

透明的數據載體

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

然而,Lombok允許我們自定義名稱、訪問級別和獲取器的返回類型。讓我們相應地更新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);
    }
}

因此,如果我們需要不可變的數據對象,record 是一個很好的解決方案。

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

有許多字段的類

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

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

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

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

為了方便這些使用,Lombok提供了一個[Builder設計模式](/creational-design-patterns#builder)的實現。

為了使用它,我們只需要用@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;
}

現在,讓我們使用StudentBuilder來創建一個具有相同屬性的對象。

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

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

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

可變數據

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

@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); 
        }

    }

一些框架可能需要帶有設置器或默認構造函數的對象。例如,Hibernate就屬于這種類型。當創建一個@Entity時,我們必須使用Lombok的注解或純Java。

繼承性

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

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

此外,@Data對象既可以擴展其他類,也可以被擴展。總之,如果我們需要繼承,我們應該堅持使用Lombok的解決方案。

結論

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7030

    瀏覽量

    89038
  • JAVA
    +關注

    關注

    19

    文章

    2967

    瀏覽量

    104758
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68616
收藏 人收藏

    評論

    相關推薦

    太子獻寶

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

    TEA加密解密分享!

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

    如何降低編程的難度

    平時學習,無論哪行的知識都要看一遍。學多學少都沒關系。 比如我自己,連財會也看過,盡管我是學理科的。沒想到竟然能派上用場。 語文數學是萬物的基礎知識,要永遠保持在80分以上,點高點低都看這個。
    發表于 06-08 18:18

    IMS馬達&軟件&控制器及培訓資料.part1

    工廠內部的一些資料,資料有點老,不知道能不能派上用場
    發表于 03-15 14:51 ?3次下載

    IMS馬達&軟件&控制器及培訓資料.part2

    工廠內部的一些資料,資料有點老,不知道能不能派上用場
    發表于 03-15 14:50 ?3次下載

    IMS馬達&軟件&控制器及培訓資料.part3

    工廠內部的一些資料,資料有點老,不知道能不能派上用場
    發表于 03-15 14:50 ?1次下載

    九寨溝地區發生7.0級地震,生命探測儀靠什么原理幫助尋人?

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

    工業物聯網的發展得到了哪些技術的輔助

    網絡系統是未來智能工廠的基礎,但成敗取決于數據收集、處理和分析能力,這就是機器視覺派上用場的時候了。
    發表于 09-23 08:58 ?602次閱讀

    物聯網在教育行業可以如何派上用場

    通過將物聯網集成到教室中,教師可以使用語音或手勢命令遠程管理教室,與遠程位置的學生建立通信,收集學生對特定主題的寶貴反饋,并為特殊學生提供幫助。
    發表于 04-26 14:43 ?1327次閱讀

    3D打印技術或將在海上風力發電機建設中派上用場

    南極熊導讀:海上風力發電機的葉片制造、基座建設,3D打印技術或將可以派上用場。 GE Renewables的Haliade-X風力發電渦輪機的葉片直徑超過兩個足球場,已經是世界上尺寸最大、功率最大
    的頭像 發表于 01-04 09:41 ?2051次閱讀

    Lombok開發插件使用小技巧

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

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

    ? https://www.ramostear.com/blog/2020/04/28/uk1860p8.html ? 如果您正在閱讀此文,想必您對Project Lombok已經有了一段時間的了解
    的頭像 發表于 10-28 11:29 ?1201次閱讀

    Lombok同時使用@Data和@Builder的一個必須要避開的巨坑

    問題背景 Lombok @Data和@Builder分別單獨分析用法 解決方法 方法一 方法二 Lombok原理 總結 問題背景 Lombok使? 同時使?@Data和@Builder ,構建無參
    的頭像 發表于 10-11 18:14 ?1996次閱讀

    在LTspice仿真軟件中如何使用FFT進行頻譜分析

    在瞬態分析中,可以像示波器一樣確認時間變化中的信號電平。而如果想確認信號中的頻率,FFT 功能將派上用場,通過仿真模擬可以確認電路的失真和噪聲成分。
    的頭像 發表于 02-06 13:45 ?9463次閱讀

    Lombok的使用

    在平時我們工作的時候,我們經常會使用 toString() 方法來輸出一個對象的一些屬性信息。Lombok 給我們提供了一個自動生成 toString() 代碼的注解,可以減少代碼行數,如果代碼屬性
    的頭像 發表于 09-25 14:03 ?785次閱讀
    主站蜘蛛池模板: 一区二区视屏| 男男浪荡性受高hnp肉| 日处女穴| 中文字幕一区二区三区免费看| 亚洲欧洲一区二区三区在线观看| 九月婷婷亚洲综合在线| 小说老卫陈红张敏陈法蓉| 国产黄色视屏| 乱人伦小说短篇| 免费人成网址在线观看国内| 国产亚洲人成a在线v网站| 呦交小u女国产秘密入口| 日本高清加勒比| 2018天天操天天干| 色视频在线观看完整免费版| 亚洲国产色图| 欧美黄视频在线观看| 成人一二| 欧美肉到失禁高h视频在线| se97se成人亚洲网站| 亚洲欧美日韩另类精品一区二区三区| 日韩免费精品一级毛片| 国产日韩精品一区二区三区| 天堂在线视频| 91午夜在线观看| 日本.www| 亚洲第一视频在线观看| 成人黄色在线网站| aaaaaa精品视频在线观看| 日本成人福利视频| 日日射天天射| 欧美日本不卡| 日本大片免费一级| 免费一看一级毛片全播放| 欧美爱爱帝国综合社区| 精品国产_亚洲人成在线高清| 天天爽天天狼久久久综合| 国产黄色大全| 免费人成在线观看网站品爱网| 好吊色视频988gao在线观看| 九九热视频免费在线观看|