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

Java的Lombok之@Builder使用總結(jié)

 更新時(shí)間:2023年12月15日 10:06:18   作者:愛(ài)喝咖啡的程序員  
這篇文章主要介紹了Java的Lombok之@Builder使用總結(jié),當(dāng)不使用@Builder注解到類(lèi)上,創(chuàng)建T1的有參構(gòu)造函數(shù),入?yún)⒉粌H包括T1中所有的參數(shù),還包括T中所有的參數(shù),T2的屬性由T1在有參構(gòu)造函數(shù)中通過(guò)調(diào)用父類(lèi)構(gòu)造器的方式賦初值,需要的朋友可以參考下

@Builder使用總結(jié)

一. @Builder與繼承共存

我所使用的Lombok版本是1.18.8

截止1.18.8版本,使用了@Builder注解的類(lèi)仍然無(wú)法使用繼承,

public class Test {
    public static void main(String[] args) {
        T1.builder().build();
    }
}
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
class T1 extends T2{
    private String name;
    private Integer age;
}
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
class T2{
    protected String pp;
}
 

報(bào)錯(cuò):

Error:(19, 1) java: com.mmr.learn.T1中的builder()無(wú)法覆蓋com.mmr.learn.T2中的builder()
返回類(lèi)型com.mmr.learn.T1.T1Builder與com.mmr.learn.T2.T2Builder不兼容

解決方案:

不使用@Builder注解到類(lèi)上,創(chuàng)建T1的有參構(gòu)造函數(shù),入?yún)⒉粌H包括T1中所有的參數(shù),還包括T中所有的參數(shù)。

T2的屬性由T1在有參構(gòu)造函數(shù)中通過(guò)調(diào)用父類(lèi)構(gòu)造器的方式賦初值。

public class Test {
    public static void main(String[] args) {
        T1 t1 = T1.builder().name("java").pp("world").build();
        System.out.println(t1.getName());
        System.out.println(t1.getAge());
        System.out.println(t1.getPp());
    }
}
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
class T1 extends T2{
    private String name;
    private Integer age;
    @Builder(toBuilder = true)
    public T1(String pp, String name, Integer age) {
        super(pp);
        this.name = name;
        this.age = age;
    }
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
class T2{
    protected String pp;
}

二. @Builder與屬性賦初值

就拿上面的案例來(lái)看,如果想對(duì)age賦初值,網(wǎng)上有的人將@Builder.Default 注解添加到待賦值屬性上,如下圖所示:

@Builder.Default
private Integer age = 26;

不涉及繼承的場(chǎng)景中,這樣用沒(méi)有問(wèn)題,因?yàn)锧Builder.Default會(huì)為age在編譯期間單獨(dú)生成一個(gè)$default$age的方法,不僅在T1類(lèi)內(nèi)所有由Lombok自動(dòng)生成的構(gòu)造函數(shù)(比如使用@AllArgsConstructor或@NoArgsConstructor或@RequiredArgsConstructor等)中為age賦予了初值,而且還在T2Builder中也為其賦予了初值。因此,以下兩種方式都能得到正確的結(jié)果:

System.out.println(T2.builder().build().getPp());
System.out.println(new T2().getPp());

但一旦涉及到繼承,此方法就不能使用了。從場(chǎng)景1(@Builder與繼承共存)中,我們知道了想要兼容繼承關(guān)系,@Builder不能加到類(lèi)上,但實(shí)際上,@Builder.Default必須使用在一個(gè)被@Builder標(biāo)識(shí)的類(lèi)中,因此@Builder.Default注解用不了了。

那該怎么辦呢?很簡(jiǎn)單,我們?cè)赥1的有參構(gòu)造函數(shù)中賦初值即可。

public class Test {
    public static void main(String[] args) {
        //輸出: 25
        System.out.println(T1.builder().build().getAge());
        //輸出: 26
        System.out.println(new T1().getAge());
    }
}
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
class T1 extends T2{
    private String name;
    private Integer age = 26;
    @Builder(toBuilder = true)
    public T1(String pp, String name, Integer age) {
        super(pp);
        this.name = name;
        if(null == age){
            this.age = 25;
        }else{
            this.age = age;
        }
    }
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
class T2{
    protected String pp;
}

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

相關(guān)文章

  • spring?boot集成smart-doc自動(dòng)生成接口文檔詳解

    spring?boot集成smart-doc自動(dòng)生成接口文檔詳解

    這篇文章主要介紹了spring?boot集成smart-doc自動(dòng)生成接口文檔詳解,smart-doc是一款同時(shí)支持java?restful?api和Apache?Dubbo?rpc接口文檔生成的工具,smart-doc顛覆了傳統(tǒng)類(lèi)似swagger這種大量采用注解侵入來(lái)生成文檔的實(shí)現(xiàn)方法
    2022-09-09
  • java實(shí)現(xiàn)直線分形山脈

    java實(shí)現(xiàn)直線分形山脈

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)直線分形山脈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • springMVC?@RestControllerAdvice注解使用方式

    springMVC?@RestControllerAdvice注解使用方式

    這篇文章主要介紹了springMVC?@RestControllerAdvice注解使用方式,下面通過(guò)一個(gè)簡(jiǎn)單的示例,演示如何使用?@RestControllerAdvice,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 深入詳解Java泛型擦除原理與限制

    深入詳解Java泛型擦除原理與限制

    這篇文章主要介紹了深入詳解Java泛型擦除原理與限制,Java泛型的設(shè)計(jì)有個(gè)獨(dú)特之處,類(lèi)型信息只存在于編譯期,運(yùn)行時(shí)會(huì)被徹底擦除,這種 擦除機(jī)制讓很多開(kāi)發(fā)者困惑,下面我們來(lái)探索它,需要的朋友可以參考下
    2026-01-01
  • Spring Security將用戶數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)的方法

    Spring Security將用戶數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Spring Security將用戶數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java實(shí)現(xiàn)AOP代理的三種方式詳解

    Java實(shí)現(xiàn)AOP代理的三種方式詳解

    AOP是一種設(shè)計(jì)思想,是軟件設(shè)計(jì)領(lǐng)域中的面向切面編程,它是面向?qū)ο缶幊痰囊环N補(bǔ)充和完善。本文將用Java實(shí)現(xiàn)AOP代理的三種方式,需要的可以參考一下
    2022-07-07
  • SpringBoot詳細(xì)分析自動(dòng)裝配原理并實(shí)現(xiàn)starter

    SpringBoot詳細(xì)分析自動(dòng)裝配原理并實(shí)現(xiàn)starter

    相對(duì)于傳統(tǒng)意義上的Spring項(xiàng)目,SpringBoot具有開(kāi)箱即用,簡(jiǎn)化配置,內(nèi)置Tomcat等等等等一系列的特點(diǎn)。在這些特點(diǎn)中,最重要的兩條就是約定優(yōu)于配置和自動(dòng)裝配
    2022-07-07
  • springboot框架的全局異常處理方案詳解

    springboot框架的全局異常處理方案詳解

    這篇文章主要介紹了springboot框架的全局異常處理方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 使用Java實(shí)現(xiàn)對(duì)兩個(gè)秒級(jí)時(shí)間戳相加

    使用Java實(shí)現(xiàn)對(duì)兩個(gè)秒級(jí)時(shí)間戳相加

    在現(xiàn)代應(yīng)用程序開(kāi)發(fā)中,時(shí)間戳的處理是一個(gè)常見(jiàn)需求,特別是當(dāng)我們需要對(duì)時(shí)間戳進(jìn)行運(yùn)算時(shí),比如時(shí)間戳的相加操作,本文我們將探討如何使用Java對(duì)兩個(gè)秒級(jí)時(shí)間戳進(jìn)行相加,并展示詳細(xì)的代碼示例和運(yùn)行結(jié)果,需要的朋友可以參考下
    2024-08-08
  • Java?超詳細(xì)講解Spring?MVC異常處理機(jī)制

    Java?超詳細(xì)講解Spring?MVC異常處理機(jī)制

    Spring?MVC中提供了一個(gè)通用的異常處理機(jī)制,它提供了一個(gè)成熟、簡(jiǎn)潔并且清晰的異常處理方案。當(dāng)使用Spring?MVC開(kāi)發(fā)Web應(yīng)用時(shí),利用這套現(xiàn)成的機(jī)制進(jìn)行異常處理也更加自然并且高效
    2022-04-04

最新評(píng)論

麟游县| 古浪县| 尖扎县| 吉木萨尔县| 田阳县| 抚远县| 师宗县| 淳化县| 鄂托克前旗| 石台县| 宝山区| 津南区| 繁峙县| 辽中县| 章丘市| 喀什市| 湄潭县| 建水县| 溧阳市| 搜索| 宁河县| 桂阳县| 夏津县| 改则县| 石阡县| 吕梁市| 稻城县| 襄垣县| 无为县| 永顺县| 库车县| 克拉玛依市| 洞口县| 奈曼旗| 辽阳市| 定日县| 台东市| 方山县| 金昌市| 长子县| 通河县|