国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用Java 17中的 record 替代 Lombok 的部分功能

開發(fā)
今天我們就來小小的總結(jié)下,我們可以在哪些地方,利用record來替換Lombok。

在DD長期更新的Java新特性專欄中,已經(jīng)介紹過Java 16中開始支持的新特性:record的使用:2分鐘學(xué)會Java中record關(guān)鍵字的用法

之前只是做了介紹,但沒有結(jié)合之前的編碼習(xí)慣或規(guī)范來聊聊未來的應(yīng)用變化。最近正好因為互相review一些合作伙伴的代碼,產(chǎn)生了一些討論話題,主要正針對于有了record之后,其實之前有些用Lombok的場景,是可以替換掉的。

今天我們就來小小的總結(jié)下,我們可以在哪些地方,利用record來替換Lombok。

Lombok的威力

Lombok是我一直都喜歡使用的工具,因為它可以讓我們的代碼變的更加整潔。比如:當(dāng)我們要寫一個User對象的時候,如果不使用Lombok,往往需要寫這么多內(nèi)容:

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之后呢,通過使用@Data注解,可以將以上內(nèi)容縮減到只需要下面這幾行即可:

@Data
public class User {
    private String username;
    private String email;
    private int userId;
}

@Data注解涵蓋了@Getter、@Setter、@EqualsAndHashCode 和 @toString,所以一個注解就可以實現(xiàn)成員變量的Getter和Setter,equals和hashcode方法的重寫,以及toString的重寫。大大降低了代碼量,讓代碼看上去更加整潔。

Lombok的問題

雖然Lombok可以幫助我們少些很多代碼,但它依然有一些缺點,比如:

  1. Lombok并非Java官方提供,而是第三方依賴,依靠社區(qū)維護。對于較新的Java版本通常都會存在兼容性問題,容易產(chǎn)生一些不可預(yù)知的奇怪錯誤。
  2. IDE的兼容限制,并不是所有的IDE都可以完美兼容Lombok,所以可能也會因此產(chǎn)生一些奇怪的錯誤。

使用record來替代

在之前的Java 新特性:record一文中,已經(jīng)提到過record類可以根據(jù)類的字段自動生成:構(gòu)造函數(shù)、equals()、hashCode() 和 toString()。這個功能就跟上面我們演示的Lombok中的@Data非常類似。

寫法的話也非常簡單,只需要這樣一行即可搞定:

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

可以看到該代碼的整潔度比Lombok的實現(xiàn)更加干凈。同時,最關(guān)鍵的一點,這是Java原生支持的,不需要引入任何第三方依賴!

record類定義完成了,具體使用的話就跟平時使用其他類一樣,去創(chuàng)建實例和調(diào)用方法即可,比如下面這樣:

UserRecord userRecord = new UserRecord("didi", "didi@didispace.com", 35);
System.out.println(userRecord.email());
System.out.println(userRecord.toString());

只是,我們在使用的時候需要了解record自動生成的代碼與Lombok的區(qū)別,就能馬上上手。

比如,從上面的例子中我們可以看到一個區(qū)別:獲取成員變量email的時候,這里并不想傳統(tǒng)getter那樣以getEmail()的形式生成。

哪些情況替代不了?

record類已經(jīng)很強大,但目前并不能完全替代Lombok。主要原因如下:

  1. record中定義的成員變量是final類型的,初始化后就不能修改了
  2. record類不能被繼承,所以也無法進一步擴展

因此,在用record替代Lombok的時候,更多用來定義靜態(tài)變量,而不是可能會變化的實例變量。但是,由于record中也可以定義函數(shù),所以對于一些對成員計算獲得的內(nèi)容,也可以實現(xiàn)和使用。

總結(jié)

Lombok和record都可以幫助我們編寫更加整潔的代碼。前者是第三方庫,可能存在一些不可預(yù)知的問題和IDE兼容問題,但功能更加全面和強大;后者屬于Java原生的能力,功能雖弱一些,但用好它也能幫助我們減少很多代碼的編寫,且IDE兼容性更好。

責(zé)任編輯:張燕妮 來源: 互聯(lián)網(wǎng)架構(gòu)小馬哥
相關(guān)推薦

2022-05-27 10:19:03

Lombok?JavaJDK14

2022-11-08 07:46:28

record類聲明代碼

2022-07-20 08:16:54

Lombokjava工具

2021-05-21 09:34:40

React React 17前端

2023-02-03 08:21:55

2023-09-23 08:17:51

Java 17開發(fā)

2023-12-18 10:11:36

C++17C++代碼

2019-11-27 10:05:00

LombokJava編程

2013-05-27 10:00:24

瀏覽器jQueryJavaScript

2010-09-10 16:24:06

SQL函數(shù)

2022-11-29 07:33:15

JavaLombokRecord

2016-10-12 13:37:09

LombokIDEidea

2025-01-10 12:00:00

LombokMavenGradle

2022-04-15 08:30:00

Lombok@Builde構(gòu)建器

2013-01-08 15:13:41

路由器組網(wǎng)網(wǎng)絡(luò)故障

2011-09-19 13:16:19

Vista登錄監(jiān)控功能

2020-11-16 19:18:15

Jupyter微軟編程

2023-11-10 08:48:09

Lombok庫Java8

2011-06-07 10:13:58

2011-07-09 10:53:58

Pear
點贊
收藏

51CTO技術(shù)棧公眾號

国产一区二区动漫| 丁香色欲久久久久久综合网| 成人综合网站| 色妹子一区二区| 搡女人真爽免费午夜网站| 精品在线一区二区三区| 国产精品国产一区二区| 一道在线中文一区二区三区| 大量国产精品视频| 欧美粗大gay| 日韩精品一区二区三区视频| 深夜福利在线看| 亚洲一区二区四区蜜桃| 成人毛片免费在线观看| 91在线国产观看| 精品一区二区成人免费视频| 秋霞成人午夜伦在线观看| 精品国产免费一区二区三区 | www.超碰在线| 欧美一级久久久久久久大片| a天堂中文在线88| 在线亚洲一区二区| 蜜桃传媒在线| 婷婷综合另类小说色区| 午夜在线网站| 在线一区二区观看| av大片在线| 日韩av在线免费看| 黄在线观看免费网站ktv| 国产视频综合在线| 欧美最新精品| 久久成人一区二区| 视频福利一区| 91精品国产自产在线观看永久| 中文字幕一区二区三区乱码图片| 亚洲一区二区三区毛片| 国产亚洲午夜| 精品中文字幕人| 国内精品在线播放| 欧美女人性生活视频| 亚洲人成网站精品片在线观看| 嫩草懂你的影院| 日韩欧美国产高清91| 麻豆av在线导航| 日韩国产激情在线| japansex久久高清精品| 日韩av免费在线| 欧美特黄一级| 黄色a级在线观看| 久久久久久99精品| 污视频在线观看免费| 精品国产免费久久 | 蜜桃一区二区三区| 风间由美久久久| 秋霞av亚洲一区二区三| 免费超爽大片黄| 亚洲女人****多毛耸耸8| 欧洲亚洲在线| 亚洲精品自在久久| 国产精品久久久久久久久久白浆 | 亚洲国产成人av网| 人人超在线公开视频| 日韩视频第一页| 成人3d精品动漫精品一二三| 国产精品一区二区三区四区五区 | 亚洲欧美日韩成人| 美女一区二区在线观看| 91精品视频大全| 国产麻豆日韩欧美久久| 亚洲老女人av| 91精品免费在线观看| 亚洲国产天堂| 国产v亚洲v天堂无码| 97精品久久久久中文字幕| 瑟瑟在线观看| 亚洲网站视频福利| 一本一道久久a久久精品蜜桃 | 制服丝袜日韩| 无码免费一区二区三区免费播放| 国产日韩av一区二区| 亚洲搞黄视频| 性色av一区二区三区免费| 亚洲欧美日韩国产一区| 欧美性猛交xxx乱久交| 日本电影亚洲天堂一区| 免费一级欧美在线观看视频| 亚洲最大福利网| 91美女片黄在线观看91美女| 在线观看免费黄视频| 97国产在线观看| 国产麻豆精品在线| 1769在线观看| 国产成人精品一区二区三区| 精品一区二区三区香蕉蜜桃| 伊人国产在线| 韩国美女主播一区| 国产精品 日产精品 欧美精品| 国产色在线 com| 国产91对白在线播放| 狠狠色丁香婷婷综合| 理论视频在线| 人人澡人人澡人人看欧美| 国产成人av网站| avtt亚洲| 国产精品免费一区| 国产欧美精品一区| 日韩一级二级| 涩涩日韩在线| 色94色欧美sute亚洲线路二| www.亚洲一二| 欧美 国产 综合| 亚洲精品国偷自产在线99热| 国产精品mm| 在线一级观看| 国产成人高清激情视频在线观看| 成人99免费视频| 国产探花视频在线观看| 亚洲曰本av电影| 亚洲精品中文在线| 99热这里只有精品首页 | 国内精品嫩模av私拍在线观看| 黄色网址三级| 欧美激情在线观看| 成人av网在线| 桃子视频成人app| 香蕉视频在线网址| 日韩成人激情在线| 免费在线视频一区| 久草在线视频福利| 日韩三级电影| 日韩欧美中文字幕制服| 久久精品系列| 深夜国产在线播放| 日韩亚洲不卡在线| 日韩欧美国产一区二区三区 | 中文欧美日韩| 成人jjav| 国产三区二区一区久久| 欧美性开放视频| 99国内精品久久久久久久| 色影视在线视频资源站| 国产日韩中文在线| 日韩欧美亚洲综合| 在线免费高清一区二区三区| 日韩精品黄色| 亚洲成人午夜在线| 亚洲天堂男人的天堂| 成人av电影在线网| 免费看日产一区二区三区| 国产喷水theporn| 国产精彩精品视频| 欧美视频免费在线观看| 欧美日韩国产在线一区| 黄色av免费在线| 国产麻豆电影在线观看| 视频在线一区二区| 中文成人综合网| 日本久久综合| 天堂a中文在线| 欧美区高清在线| 亚洲二区在线播放视频| 国产成人免费视| 18国产精品| 在线观看午夜看亚太视频| 动漫美女被爆操久久久| 精品裸体舞一区二区三区| 成人精品视频一区二区三区尤物| 黄色成人美女网站| 精品无人乱码| 穿情趣内衣被c到高潮视频| 欧美富婆性猛交| 婷婷丁香久久五月婷婷| 午夜在线精品| 色综合视频一区二区三区44| av三级影院| 激情视频一区二区| 国产一区二区三区在线免费观看| 中文字幕欧美日韩一区| 一区二区国产在线| 欧美aa一级| 污网站在线观看免费| 精品欧美一区二区在线观看视频| 亚洲无亚洲人成网站77777| 国产精品初高中害羞小美女文| 亚洲一级电影| **欧美日韩在线| 国产中文字幕在线视频| 大陆av在线播放| 成人有码视频在线播放| 亚洲精品一区二区网址| 亚洲精品高清视频在线观看| 日本成人中文字幕| 任你弄精品视频免费观看| 黄a在线观看| 欧美日韩在线成人| 国产麻豆日韩| 九九精品视频在线| 欧美人狂配大交3d怪物一区| 欧美激情中文不卡| 奇米一区二区三区|