欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解Java中@Accessors和@Builder

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

@Accessors和@Builder

@Accessors(chain=true)

就是new一個對象后可以鏈?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方法賦值。

這是因為@Accessors(chain=true)將lombok生成的setter方法返回值變?yōu)榱?code>this,也就是返回了對象本身,代替了原本的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 對象,然后給 UserBuilder 對象賦值,最后通過 UserBuilder 對象的 build() 來生成 User 對象。

可以看編譯后的class文件

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

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

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

@Accessors和@Builder使用的坑

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

詳細看看@Accessors注解

@Accessors的源碼

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

@Accessors屬性說明

fluent屬性

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

chain屬性

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

makeFinal屬性

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

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

prefix屬性

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

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

prefix屬性的坑

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

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

相關(guān)文章

  • Java?API文檔的使用方法詳解

    Java?API文檔的使用方法詳解

    在開發(fā)過程中如果遇到疑難問題,除了可以在網(wǎng)絡(luò)中尋找答案,也可以在Java API幫助文檔(簡稱"JDK文檔"”)中查找答案,下面這篇文章主要給大家介紹了關(guān)于Java?API文檔使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Mybatis基于TypeHandler實現(xiàn)敏感數(shù)據(jù)加密

    Mybatis基于TypeHandler實現(xiàn)敏感數(shù)據(jù)加密

    業(yè)務(wù)場景中經(jīng)常會遇到諸如用戶手機號,身份證號,銀行卡號,郵箱,地址,密碼等等信息,屬于敏感信息,本文就來介紹一下Mybatis基于TypeHandler實現(xiàn)敏感數(shù)據(jù)加密,感興趣的可以了解一下
    2023-10-10
  • Java實現(xiàn)多線程同步五種方法詳解

    Java實現(xiàn)多線程同步五種方法詳解

    這篇文章主要介紹了Java實現(xiàn)多線程同步五種方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 詳細聊聊JDK中的反模式接口常量

    詳細聊聊JDK中的反模式接口常量

    這篇文章主要給大家介紹了關(guān)于JDK中反模式接口常量的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用jdk具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • J2EE Servlet基礎(chǔ)在瀏覽器上運行HelloServlet的方法

    J2EE Servlet基礎(chǔ)在瀏覽器上運行HelloServlet的方法

    這篇文章主要介紹了J2EE Servlet基礎(chǔ)在瀏覽器上運行HelloServlet的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot+Vue項目部署上線的實現(xiàn)示例

    SpringBoot+Vue項目部署上線的實現(xiàn)示例

    本文主要介紹了SpringBoot+Vue項目部署上線的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • java中文及特殊字符的校驗方法

    java中文及特殊字符的校驗方法

    這篇文章主要為大家詳細介紹了java中文及特殊字符的校驗方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java超詳細教你寫一個銀行存款系統(tǒng)案例

    Java超詳細教你寫一個銀行存款系統(tǒng)案例

    這篇文章主要介紹了怎么用Java來寫一個銀行的存款系統(tǒng),銀行存款主要有賬號和存款金額兩個屬性,感興趣的朋友跟隨文章往下看看吧
    2022-03-03
  • Java中的兩種for循環(huán)介紹

    Java中的兩種for循環(huán)介紹

    在學(xué)習(xí)Hibernate的時候?qū)W習(xí)一種在Java當(dāng)中的for循環(huán),估計是以前學(xué)習(xí)的時候沒有記住,忘記了在這里再寫下筆記
    2012-10-10
  • idea提交文件時如何忽略某些文件的提交

    idea提交文件時如何忽略某些文件的提交

    這篇文章主要介紹了idea提交文件時如何忽略某些文件的提交問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論