最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Java中@Accessors和@Builder

 更新時(shí)間:2023年08月20日 10:15:22   作者:Owen Guo  
本文主要介紹了@Accessors和@Builder使用,區(qū)別與坑,對(duì)使用這兩個(gè)注解的有一定的幫助,具有一定的參考價(jià)值,感興趣的可以了解一下

@Accessors和@Builder

@Accessors(chain=true)

就是new一個(gè)對(duì)象后可以鏈?zhǔn)秸{(diào)用set給屬性賦值。

@Data
@Accessors(chain = true)
public class User {
    private String name;
    private Integer age;
    private Double weight;
    public static void main(String[] args) {
        User user = new User().setName("張三").setAge(18).setWeight(60.00);
        System.out.println(user);
    }
}

從上面的代碼我們看到new User()后面可以鏈?zhǔn)秸{(diào)用set方法賦值。

這是因?yàn)?code>@Accessors(chain=true)將lombok生成的setter方法返回值變?yōu)榱?code>this,也就是返回了對(duì)象本身,代替了原本的void。

@Builder

@Builer注解是基于建造者模式的鏈?zhǔn)讲僮鳌?/p>

@Data
@Builder
public class User {
    private String name;
    private Integer age;
    private Double weight;
    public static void main(String[] args) {
        User user = User.builder().name("張三").age(18).weight(60.00).build();
        System.out.println(user);
    }
}

我們能看到是先使用 bulder 方法后再鏈?zhǔn)讲僮?,然后調(diào)用 build 方法返回。

原因是內(nèi)部生成了構(gòu)建起 UserBuilder ,調(diào)用 builder() 方法就是是創(chuàng)建 UserBuilder 對(duì)象,然后給 UserBuilder 對(duì)象賦值,最后通過 UserBuilder 對(duì)象的 build() 來生成 User 對(duì)象。

可以看編譯后的class文件

@Accessors和@Builder的區(qū)別

其實(shí)我們看它們編譯后的class文件就可以直到原因。 @Accessors 是將生成的 setter() 方法返回 this ,而 @Builder 是再對(duì)象內(nèi)部創(chuàng)建一個(gè)構(gòu)建器,通過這個(gè)構(gòu)建器來最終創(chuàng)建對(duì)象。

@Builder 底層新建了一個(gè)對(duì)象,為了實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用再創(chuàng)建一個(gè)對(duì)象感覺優(yōu)點(diǎn)大材小用了。 @Accessors 再實(shí)現(xiàn)了鏈?zhǔn)秸{(diào)用的基礎(chǔ)上,減少了多余對(duì)象的創(chuàng)建。

@Accessors和@Builder使用的坑

  • 在有的開源反射工具包對(duì)對(duì)象進(jìn)行淺拷貝時(shí),獲取set方法原信息時(shí)會(huì)判斷返回值是否為void,這樣使用 @Accessors 注解就會(huì)報(bào)錯(cuò)。
  • @Builder 注解會(huì)給類默認(rèn)生成全參構(gòu)造,這樣就沒有了默認(rèn)的無參構(gòu)造,在Spring這類容器中默認(rèn)調(diào)用無參構(gòu)造就報(bào)錯(cuò)了,所以要加上 @NoArgsConstructor @AllArgsConstructor 注解

詳細(xì)看看@Accessors注解

@Accessors的源碼

可以看到它有四個(gè)屬性, chian=true 就是可以鏈?zhǔn)秸{(diào)用,其他的下面我們來分別說明下。

@Accessors屬性說明

fluent屬性

fluent=true 時(shí),setter和getter方法就沒有set和get了,直接調(diào)用屬性名即可

chain屬性

chain=true 時(shí),就可以鏈?zhǔn)秸{(diào)用setter方法給屬性賦值了

makeFinal屬性

makeFinal=true 時(shí),生成的setter和getter方法都是final修飾的方法

final修飾的方法表示不能在子類中重寫這些方法。

prefix屬性

該屬性添加一個(gè)數(shù)據(jù),添加屬性的前綴,表示忽略屬性對(duì)應(yīng)的前綴來生成setter和getter方法

如上圖一樣,屬性賦值的時(shí)候就可以忽略前綴。

prefix屬性的坑

1、如果屬性的前綴和prefix寫的前綴不匹配,那setter和getter方法就不會(huì)生成了。
2、屬性的前綴后的第一個(gè)字母必須是大寫,否則也不會(huì)生成setter和getter方法。
3、上面說的不會(huì)生成setter和getter方法是連不去前綴的都不會(huì)生成,相當(dāng)于@Data注解失效了。

到此這篇關(guān)于深入理解Java中@Accessors和@Builder的文章就介紹到這了,更多相關(guān)Java中@Accessors和@Builder內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java將科學(xué)計(jì)數(shù)法數(shù)據(jù)轉(zhuǎn)為字符串的實(shí)例

    Java將科學(xué)計(jì)數(shù)法數(shù)據(jù)轉(zhuǎn)為字符串的實(shí)例

    下面小編就為大家?guī)硪黄狫ava將科學(xué)計(jì)數(shù)法數(shù)據(jù)轉(zhuǎn)為字符串的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Spring簡(jiǎn)明分析Bean作用域

    Spring簡(jiǎn)明分析Bean作用域

    scope用來聲明容器中的對(duì)象所應(yīng)該處的限定場(chǎng)景或者說該對(duì)象的存活時(shí)間,即容器在對(duì)象進(jìn)入其 相應(yīng)的scope之前,生成并裝配這些對(duì)象,在該對(duì)象不再處于這些scope的限定之后,容器通常會(huì)銷毀這些對(duì)象,這篇文章主要介紹了Spring中的Bean作用域,需要的朋友可以參考下
    2022-07-07
  • Java string.trim()究竟去掉了什么

    Java string.trim()究竟去掉了什么

    這篇文章主要介紹了Java string.trim()究竟去掉了什么,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • spring調(diào)度注解@Scheduled方式(含分布式)

    spring調(diào)度注解@Scheduled方式(含分布式)

    文章介紹了Java中任務(wù)調(diào)度的幾種常見方法,包括JDK原生的Timer、ScheduledThreadPoolExecutor和Spring的@Scheduled注解,文章還討論了如何在分布式環(huán)境中實(shí)現(xiàn)任務(wù)調(diào)度,并介紹了一些開源的分布式任務(wù)調(diào)度解決方案,如Quartz和XXL-JOB
    2024-11-11
  • idea生成類注釋和方法注釋的正確方法(推薦)

    idea生成類注釋和方法注釋的正確方法(推薦)

    這篇文章主要介紹了idea生成類注釋和方法注釋的正確方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java的MyBatis框架中MyBatis Generator代碼生成器的用法

    Java的MyBatis框架中MyBatis Generator代碼生成器的用法

    這篇文章主要介紹了Java的MyBatis框架中Mybatis Generator代碼生成器的用法,Mybatis Generator主要被用來生成繁瑣的配置文件來提高效率,需要的朋友可以參考下
    2016-04-04
  • JPA中@ElementCollection使用示例詳解

    JPA中@ElementCollection使用示例詳解

    在JPA中,@ElementCollection注解主要用于映射集合屬性,例如List、Set或數(shù)組等集合屬性,以及Map結(jié)構(gòu)的集合屬性,每個(gè)屬性值都有對(duì)應(yīng)的key映射,這篇文章主要介紹了JPA中@ElementCollection使用,需要的朋友可以參考下
    2023-11-11
  • Java利用數(shù)組隨機(jī)抽取幸運(yùn)觀眾如何實(shí)現(xiàn)

    Java利用數(shù)組隨機(jī)抽取幸運(yùn)觀眾如何實(shí)現(xiàn)

    這篇文章主要介紹了Java利用數(shù)組隨機(jī)抽取幸運(yùn)觀眾如何實(shí)現(xiàn),需要的朋友可以參考下
    2014-02-02
  • SpringBoot中集成串口通信的項(xiàng)目實(shí)踐

    SpringBoot中集成串口通信的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot中集成串口通信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java的application.yml文件的配置全過程

    Java的application.yml文件的配置全過程

    本文介紹了在Java項(xiàng)目中使用application.yml文件進(jìn)行配置的方法,重點(diǎn)講解了數(shù)據(jù)源、連接池、MyBatis、MyBatis-Plus和Redis的配置,同時(shí),還介紹了如何使用別名來簡(jiǎn)化MyBatis的配置
    2026-03-03

最新評(píng)論

乌兰察布市| 宁阳县| 吉木乃县| 分宜县| 临洮县| 吴旗县| 涿鹿县| 曲沃县| 英德市| 陆川县| 茌平县| 阿拉善右旗| 来安县| 定兴县| 稻城县| 涟水县| 称多县| 留坝县| 达日县| 洪泽县| 九江市| 游戏| 潮安县| 碌曲县| 彩票| 银川市| 永川市| 克东县| 保康县| 阿克苏市| 楚雄市| 阿荣旗| 桂林市| 绥棱县| 株洲市| 华容县| 平南县| 汝阳县| 上杭县| 余姚市| 新丰县|