国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

@Builder注解使用

這篇具有很好參考價(jià)值的文章主要介紹了@Builder注解使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、@Builder注解

資料來(lái)源: http://fendou.net.cn/index.php/a/369
https://blog.csdn.net/qq_39249094/article/details/120881578
  • 作用于類(lèi),將其變成建造者模式

  • 可以以鏈的形式調(diào)用

  • 初始化實(shí)例對(duì)象生成的對(duì)象是不可以變的,可以在創(chuàng)建對(duì)象的時(shí)候進(jìn)行賦值(如果想改變的話需要在@Builder后面添加參數(shù)toBuilder=true)

  • 需要在原來(lái)的基礎(chǔ)上修改可以加 set 方法,final 字段可以不需要初始化

  • 生成一個(gè)全參的構(gòu)造函數(shù)

1.0 Lombok坐標(biāo)


<dependency>
   <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>         
    <version>0.10.2</version>
</dependency>

提供在設(shè)計(jì)數(shù)據(jù)實(shí)體時(shí),對(duì)外保持private setter,而對(duì)屬性的賦值采用Builder的方式,這種方式最優(yōu)雅,也更符合封裝的原則,不對(duì)外公開(kāi)屬性的寫(xiě)操作

@Builder聲明實(shí)體,表示可以進(jìn)行Builder方式初始化

@Value注解,表示只公開(kāi)getter,對(duì)所有屬性的setter都封閉,即private修飾,所以它不能和@Builder一起用

1.1 注解使用


@Builder
@Getter
@Data
publicclassUserInfo {
    private  String  name;
    privateStringemail;
?
    @Override
    public String toString() {
        return"UserInfo{"+
                "name='"+name+'\''+
                ", email='"+email+'\''+
                '}';
    }
?
    public static void main(String[] args) {
        UserInfo userInfo = UserInfo.builder().build();
        System.out.println("userInfo---->"+userInfo);
?
        UserInfo userInfo1 = UserInfo.builder()
                .name("zzl")
                .email("bgood@sina.com")
                .build();
        System.out.println("userInfo1---->"+userInfo1);
    }
}
@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

1.2 注解的屬性介紹


1.2.1 toBuilder

  • 設(shè)置為 true 可以對(duì)這個(gè)對(duì)象進(jìn)行拷貝生成新的對(duì)象,可以再修改,默認(rèn)為 false

怎么設(shè)置為true?

  @Builder(toBuilder = true)

我們使用UserInfo.builder().build()創(chuàng)建出來(lái)之后,還可以修改對(duì)象的內(nèi)容么(不使用set方法)?

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

我們此時(shí)發(fā)現(xiàn)如果想對(duì)已經(jīng)構(gòu)建了的對(duì)象在修改的話,會(huì)出錯(cuò),并找不到這個(gè)方法,我們只需要在類(lèi)注解上添加@Builder(toBuilder = true)即可

  
@Builder(toBuilder=true)
@Getter
public class UserInfo {}
userInfo = userInfo.toBuilder()
        .name("OK")
        .email("zgood@sina.com")
        .build();

1.2.2 @Builder.Default 注解

非 final 的字段可以有默認(rèn)值

@Builder.Default
private String name ="劉亦菲";

我們下面雖然沒(méi)有對(duì)name賦值,但是輸出時(shí)”name“依然會(huì)時(shí)"劉亦菲"

UserInfo userInfo = UserInfo.builder().build();
System.out.println("userInfo---->"+userInfo);

final字段加不加Default都可以初始化成功,因?yàn)閒inal字段如果第一次不是null的話,就不可修改(簡(jiǎn)單的來(lái)說(shuō),final字段有了初始值之后就不可更改)

private final Integerage=18; 

這兩種寫(xiě)法都可以

@Builder.Default
private final Integer age;  

1.2.3 buildMethodName

指定創(chuàng)建實(shí)體類(lèi)的方法名,默認(rèn)值為 build

當(dāng)我們指定內(nèi)部靜態(tài)類(lèi)的方法名為“test”的時(shí)候,發(fā)現(xiàn)下面已經(jīng)開(kāi)始報(bào)錯(cuò)了

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

當(dāng)我們把這里改成test之后便不會(huì)報(bào)錯(cuò)了

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

1.2.4 builderMethodName

指定創(chuàng)建內(nèi)部靜態(tài)類(lèi)的方法名,默認(rèn)值為 builder

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

1.2.5 builderClassName

指定內(nèi)部靜態(tài)的類(lèi)名,默認(rèn)值為 “”,默認(rèn)創(chuàng)建的類(lèi)名為 thisclassBuilder

這個(gè)我不太懂,不知道怎么演示

1.2.6 access

設(shè)置 builderMethodName 的訪問(wèn)權(quán)限修飾符,默認(rèn)為 public

共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE,其中 MODULE 是 Java 9 的新特性

access = AccessLevel.PUBLIC

1.2.7 setterPrefix

設(shè)置 setter 方法的前綴,默認(rèn)為 “”

1.3 處理添加無(wú)參構(gòu)造函數(shù)報(bào)錯(cuò)時(shí)報(bào)錯(cuò)


@Builder 會(huì)生成一個(gè)全參構(gòu)造方法,因此就沒(méi)有了無(wú)參構(gòu)造方法,但當(dāng)我們遇到需要無(wú)參構(gòu)造方法時(shí)就會(huì)發(fā)生問(wèn)題,這個(gè)時(shí)候手寫(xiě)或者加上 @NoArgsConstructor 都會(huì)報(bào)錯(cuò)

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

1.3.1 處理方案1

加上 @AllArgsConstructor

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

1.3.2 處理方案2

使用 @Builder 對(duì)一個(gè) DTO 實(shí)現(xiàn)一個(gè)構(gòu)造器,但是在做 Json 反序列化的時(shí)候發(fā)生錯(cuò)誤,原因就是缺少無(wú)參公共的構(gòu)造函數(shù),而手動(dòng)寫(xiě)一個(gè)無(wú)參構(gòu)造函數(shù)的時(shí)候編譯錯(cuò)誤,就是和 @Builder 沖突

雖然標(biāo)準(zhǔn)的 @Builder 沒(méi)法是需要私有化構(gòu)造函數(shù)的,但是在某些場(chǎng)景下我們需要對(duì)這種標(biāo)準(zhǔn)變形,這個(gè)時(shí)候 lombok 提供了 @Tolerate 實(shí)現(xiàn)對(duì)沖突的兼容

使用@Tolerate注解

我們手動(dòng)添加一個(gè)無(wú)參構(gòu)造函數(shù),但是當(dāng)運(yùn)行之后就會(huì)出現(xiàn)錯(cuò)誤

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

但是當(dāng)我們?cè)跓o(wú)參構(gòu)造函數(shù)上添加@Tolerate注解之后就可以正常運(yùn)行

@builder,springboot,java,開(kāi)發(fā)語(yǔ)言,spring boot,Powered by 金山文檔

1.4 @Builder內(nèi)部


  • 創(chuàng)建一個(gè)名為 ThisClassBuilder 的內(nèi)部靜態(tài)類(lèi),并具有和實(shí)體類(lèi)相同的屬性(稱(chēng)為構(gòu)建器)

  • 在構(gòu)建器中:對(duì)于目標(biāo)類(lèi)中的所有的屬性和未初始化的 final 字段,都會(huì)在構(gòu)建器中創(chuàng)建對(duì)應(yīng)屬性

  • 在構(gòu)建器中:創(chuàng)建一個(gè)無(wú)參的 default 構(gòu)造函數(shù)

  • 在構(gòu)建器中:實(shí)體類(lèi)中的每個(gè)參數(shù),都會(huì)對(duì)應(yīng)創(chuàng)建類(lèi)似于 setter 的方法,方法名與該參數(shù)名相同。 并且返回值是構(gòu)建器本身(便于鏈?zhǔn)秸{(diào)用)

  • 在構(gòu)建器中:會(huì)創(chuàng)建一個(gè) build 方法,調(diào)用 build 方法,就會(huì)根據(jù)設(shè)置的值進(jìn)行創(chuàng)建實(shí)體對(duì)象

  • 在構(gòu)建器中:會(huì)生成一個(gè) toString 方法

  • 在實(shí)體類(lèi)中:會(huì)創(chuàng)建一個(gè) builder 方法,它的目的是用來(lái)創(chuàng)建構(gòu)建器文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-769941.html

@Builder
public class User {
    private String username;
    private String password;
}
public class User {
    private String username;
    private String password;
?
?
    User(Stringusername, Stringpassword) {
        this.username=username;
        this.password=password;
    }
    
//  在實(shí)體類(lèi)中會(huì)創(chuàng)建一個(gè) builder 方法,它的目的是用來(lái)創(chuàng)建構(gòu)建器
    public static User.UserBuilder builder() {
        returnnewUser.UserBuilder();
    }
//  構(gòu)建器
    public static class UserBuilder {
        //在構(gòu)建器中:對(duì)于目標(biāo)類(lèi)中的所有的屬性和未初始化的 final 字段,都會(huì)在構(gòu)建器中創(chuàng)建對(duì)應(yīng)屬性
        private String username;
        private String password;
        
        //在構(gòu)建器中:創(chuàng)建一個(gè)無(wú)參的 default 構(gòu)造函數(shù)
        UserBuilder() {
        }
?
        //在構(gòu)建器中:實(shí)體類(lèi)中的每個(gè)參數(shù),都會(huì)對(duì)應(yīng)創(chuàng)建類(lèi)似于 setter 的方法,方法名與該參數(shù)名相同。 并且返回值是構(gòu)建器本身(便于鏈?zhǔn)秸{(diào)用)        
        public User.UserBuilde rusername(Stringusername) {
            this.username=username;
            returnthis;
        }
?
        public User.UserBuilderpassword(Stringpassword) {
            this.password=password;
            returnthis;
        }
        
        //在構(gòu)建器中:會(huì)創(chuàng)建一個(gè) build 方法,調(diào)用 build 方法,就會(huì)根據(jù)設(shè)置的值進(jìn)行創(chuàng)建實(shí)體對(duì)象
        publicUserbuild() {
            return newUser(this.username, this.password);
        }
        
        //在構(gòu)建器中:會(huì)生成一個(gè) toString 方法 
        public String toString() {
            return"User.UserBuilder(username="+this.username+", password="+this.password+")";
        }
    }
}   

到了這里,關(guān)于@Builder注解使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 什么是Java中的Builder模式?

    Java中的Builder模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許你將一個(gè)復(fù)雜對(duì)象的構(gòu)建過(guò)程分解為多個(gè)步驟,使得客戶(hù)端可以按照一定的順序構(gòu)建對(duì)象,而無(wú)需在每個(gè)步驟中都進(jìn)行實(shí)例化。這種模式有助于隱藏對(duì)象的構(gòu)造過(guò)程,使得代碼更加清晰、易于理解和維護(hù)。 下面是一個(gè)簡(jiǎn)單的示

    2024年02月13日
    瀏覽(18)
  • HarmonyOS 應(yīng)用開(kāi)發(fā)之wrapBuilder:封裝全局@Builder

    HarmonyOS 應(yīng)用開(kāi)發(fā)之wrapBuilder:封裝全局@Builder

    全局@Builder作為wrapBuilder的參數(shù)返回WrappedBuilder對(duì)象,實(shí)現(xiàn) 全局@Builder 可以進(jìn)行賦值和傳遞。 說(shuō)明: 從API version 11開(kāi)始使用。 wrapBuilder是一個(gè)模板函數(shù),返回一個(gè) WrappedBuilder 對(duì)象。 同時(shí) WrappedBuilder 對(duì)象也是一個(gè)模板類(lèi)。 說(shuō)明:模板參數(shù) Args extends Object[] 是需要包裝的builder函

    2024年04月10日
    瀏覽(53)
  • GUIslice Builder 安裝及使用

    GUIslice Builder 安裝及使用

    GUIslice Builder是一個(gè)可視化UI設(shè)計(jì)工具,可以簡(jiǎn)化GUIslice的UI設(shè)計(jì)流程。下面是GUIslice Builder的安裝和使用步驟: 首先,下載GUIslice Builder并解壓縮文件。 然后,進(jìn)入解壓后的文件夾,并運(yùn)行GUIsliceBuilder.exe。 接下來(lái),創(chuàng)建一個(gè)新項(xiàng)目。在主界面上,選擇“New Project”,并輸入項(xiàng)目

    2024年02月09日
    瀏覽(29)
  • Java設(shè)計(jì)模式之建造者模式詳解(Builder Pattern)

    在日常的開(kāi)發(fā)工作中,我們常常需要?jiǎng)?chuàng)建一些復(fù)雜的對(duì)象。這些對(duì)象可能包含許多不同的屬性,并且這些屬性的初始化過(guò)程可能相當(dāng)復(fù)雜。在這種情況下,建造者模式是一種非常有用的設(shè)計(jì)模式,因?yàn)樗试S我們分步驟地創(chuàng)建復(fù)雜的對(duì)象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    瀏覽(25)
  • java與es8實(shí)戰(zhàn)之一:以builder pattern開(kāi)篇

    java與es8實(shí)戰(zhàn)之一:以builder pattern開(kāi)篇

    這里分類(lèi)和匯總了欣宸的全部原創(chuàng)(含配套源碼):https://github.com/zq2599/blog_demos 《java與es8實(shí)戰(zhàn)》系列是欣宸與2022年夏季推出的原創(chuàng)系列,如標(biāo)題所述,該系列從一個(gè)java程序員視角去學(xué)習(xí)和實(shí)踐elasticsearch的8.2版本,目標(biāo)是與大家一起掌握與elasticsearch開(kāi)發(fā)相關(guān)的技能,以應(yīng)對(duì)實(shí)

    2024年02月11日
    瀏覽(17)
  • 使用Builder AST 轉(zhuǎn)換為流式API

    從Groovy 2.3開(kāi)始,我們可以使用 @Builder AST轉(zhuǎn)換輕松地為我們的類(lèi)創(chuàng)建一個(gè)流暢的API。 我們可以將注釋?xiě)?yīng)用于我們的類(lèi),結(jié)果類(lèi)文件將具有支持流暢API的所有必要方法。 我們可以自定義如何使用不同的注釋參數(shù)生成流暢的API。 在Groovy代碼中,我們已經(jīng)可以使用 with 方法 有一個(gè)

    2024年02月07日
    瀏覽(18)
  • 【Java掃盲篇】String、String Buffer和String Builder的區(qū)別

    【Java掃盲篇】String、String Buffer和String Builder的區(qū)別

    你在面試時(shí),面試官讓你講講 String String Buffer String Builde r的區(qū)別,你是否能流暢的、完整的敘述出他們?nèi)叩膮^(qū)別? 相同點(diǎn): 他們的底層都是由char數(shù)組實(shí)現(xiàn)的。 不同點(diǎn): String對(duì)象一旦創(chuàng)建,是不能修改的,如果要修改,會(huì)重新開(kāi)辟空間來(lái)存儲(chǔ)修改后的對(duì)象;而String Buffer和

    2024年04月22日
    瀏覽(15)
  • HarmonyOS 應(yīng)用開(kāi)發(fā)之@Builder裝飾器:自定義構(gòu)建函數(shù)_harmony 構(gòu)件函數(shù)

    HarmonyOS 應(yīng)用開(kāi)發(fā)之@Builder裝飾器:自定義構(gòu)建函數(shù)_harmony 構(gòu)件函數(shù)

    @Builder function overBuilder( KaTeX parse error: Can\\\'t use function \\\'$\\\' in math mode at position 49: …`overBuilder===$?{ .paramA1}`) HelloComponent({message: $$.paramA1}) } } } @Component struct HelloComponent { @Link message: string; build() { Row() { Text( HelloComponent===${this.message} ) } } } @Entry @Component struct Parent { @State label: string =

    2024年04月25日
    瀏覽(20)
  • 解決java.lang.NoSuchMethodError org.springframework.boot.builder.SpringApplicationBuilder 問(wèn)題

    問(wèn)題: java.lang.NoSuchMethodError:org.springframework.boot.builder.SpringApplicationBuilder 產(chǎn)生原因: 由于Spring Cloud和Spring Boot 版本不兼容造成的 解決方案: 可以訪問(wèn)Spring的官方網(wǎng)站查看對(duì)應(yīng)的Spring Cloud和Spring Boot版本的對(duì)應(yīng)關(guān)系,如下表 SpringCloud SpringBoot 2021.0.x (又名:Jubilee) 2.6.x, 2.7.x (從 2

    2023年04月08日
    瀏覽(92)
  • ‘org.elasticsearch.client.RequestOptions$Builder.removeHeader(java.lang.String)‘

    學(xué)習(xí)官方文檔的Java-api,習(xí)慣用Spring-boot開(kāi)發(fā),結(jié)果使用的時(shí)候遇到j(luò)ava.lang.NoSuchMethodError: \\\'org.elasticsearch.client.RequestOptions$Builder org.elasticsearch.client.RequestOptions$Builder.removeHeader(java.lang.String)\\\'這個(gè)問(wèn)題。 各種搜索發(fā)現(xiàn)可能是依賴(lài)版本問(wèn)題,編譯時(shí)的依賴(lài)版本和運(yùn)行時(shí)的不一樣,找

    2024年02月08日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包