在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Lombok的使用

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-09-25 14:03 ? 次閱讀

在平時我們工作的時候,我們經常會使用toString() 方法來輸出一個對象的一些屬性信息。Lombok 給我們提供了一個自動生成 toString()代碼的注解,可以減少代碼行數,如果代碼屬性比較多的話,可以避免我們些代碼的過程中出現屬性遺漏的問題。
本文我們來講講 Lombok 的 @ToString()相關內容,以便于我們以后更好的使用 Lombok。

Lombok 的使用

首先我們添加一下 maven 依賴。

< dependency >
  < groupId >org.projectlombok< /groupId >
  < artifactId >lombok< /artifactId >
  < version >1.18.22< /version >
  < scope >provided< /scope >
< /dependency >

然后我們創建一個 Account 的 class 來演示我們一下我們的各種操作。

@Getter
@Setter
@ToString
public class Account {

    private String id;

    private String name;

}

默認情況下,我們在調用 Account 的toString() 方法之后,輸出的結果可能如下:

Account(id=12345, name=account)

這是一種比較標準的格式輸出。

Lombok的配置

父類 toString() 的調用

現在假設我們有一個 SavingAccount 的 class 繼承于 Account ,我們調用 SavingAccount 的 toString() 方法時,希望把 Account 的一些屬性也能夠一起輸出, 這個時候我們可以設置 callSupper 屬性來達到我們的目的。

@ToString(callSupper = true)
public class SavingAccount extends Account {
    private String savingAccountId;
    // 省略 get set
}

上述代碼的操作,就能把父類 Account 的屬性都輸出出來:

SavingAccount(super=Account(id=12345, name=An account), savingAccountId=6789)

省略字段名稱

我們知道默認輸出的時候,會包含字段名稱,我們可以通過設置 includeFieldNames 來控制,是否顯示屬性名稱。

@ToString(includeFieldNames = false)
public class Account {

    private String id;

    private String name;

    // 省略 get set
}

把 includeFieldNames 設置為 false 之后,輸出結果如下

Account(12345, An account)

使用字段代替 Getter

我們知道 getter 方法提供了用于打印的字段值。如果該類不包含某個特定字段的getter方法,那么Lombok會直接訪問該字段并獲取其值。
我們可以通過設置 doNotUseGetters 屬性為 true,將 Lombok 配置為總是使用直接的字段值而不是getter。

@ToString(doNotUseGetters = true)
public class Account {

    private String id;

    private String name;

    // ignored getter
    public String getId() {
        return "this is the id:" + id;
    }

    // standard getters and setters
}

如果沒有這個屬性,我們會得到通過調用getters得到的輸出。

Account(id=this is the id:12345, name=An account)

相反,通過設置doNotUseGetters屬性,輸出實際上顯示了id字段的值,而沒有調用getter。

Account(id=12345, name=An account)

字段的包含和排除

假設我們想從字符串表示中排除某些字段,例如,密碼、其他敏感信息或大的JSON結構。我們可以通過@ToString.Exclude注解來省略這些字段。
讓我們把名字字段從我們的表示中排除

@ToString
public class Account {

    private String id;

    @ToString.Exclude
    private String name;

}

或者,我們可以只指定輸出中所需的字段,我可以通過使用 @ToString(onlyExplicitlyIncluded = true)@ToString.Include來實現。

@ToString(onlyExplicitlyIncluded = true)
public class Account {

    @ToString.Include
    private String id;

    private String name;
    

}

上述兩種方法,最終輸出,都只能輸出 id 字段。

Account(id=12345)

另外,Lombok 會自動忽略以$ 開頭的變量,但是我們可以通過 @ToString.Include 來強制Lombok輸出。

輸出排序

默認情況下,Lombok 的輸出,是按照字段定義的順序進行輸出的,我可以通過設置 @ToString.Include 來進行排序。
我們先修改一下 Account 的字段順序, 然后對 id 進行標記順序。

@ToString
public class Account {

    private String name;

    @ToString.Include(rank = 1)
    private String id;

}

現在 id 字段輸出的時候,會排在 name 的前面

Account(id=12345, name=An account)

Lombok 輸出的規則大致如下:

  • rank 排名越大,排序越靠前
  • 默認的排序值為0
  • 相同的排序通過根據字段定義順序輸出

方法輸出

除了字段之外,我們也可以包括一個不需要參數的實例方法的輸出。我們可以通過用@ToString.Include標記無參數的實例方法來做到這一點。

@ToString
public class Account {

    private String id;

    private String name;

    @ToString.Include
    String description() {
        return "Account description";
    }

}

這里 description 將會作為輸出 key 進行打印輸出。

Account(id=12345, name=An account, description=Account description)

如果指定的方法名稱與字段名稱相匹配,那么該方法就會優先于字段。換句話說,輸出包含方法調用的結果,而不是匹配字段的值。

修改字段名稱

我們可以通過 @ToString.Include 的屬性來修改字段的名稱。

@ToString
public class Account {

    @ToString.Include(name = "identification")
    private String id;

    private String name;

}

現在輸出結果中,將不會包含字段名稱id ,將會輸出 identification。

Account(identification=12345, name=An account)

打印數組

Lombok 使用 Arrays.deepToString() 方法打印數組,將數組元素轉換為其相應的字符串表示。但是數組有可能包含直接引用或間接循環引用。為了避免無限遞歸及其相關的運行時錯誤,該方法將任何從自身內部對數組的循環引用渲染為"[[...]]"。
讓我們通過給我們的賬戶類添加一個對象數組字段來看看。

@ToString
public class Account {

    private String id;

    private Object[] relatedAccounts;

}

這 relatedAccounts 數組的打印如下

Account(id=12345, relatedAccounts=[54321, [...]])

重要的是,循環引用被deepToString()方法檢測到,并且被Lombok適當地呈現出來,沒有引起任何StackOverflowError。

有一些注意點

有幾個細節值得一提,對避免產生意外的結果很重要。

  • 在類中存在任何名為toString()的方法(不管返回類型如何),Lombok不會生成其 toString() 方法。
  • 不同版本的Lombok可能會改變生成方法的輸出格式。在任何情況下,我們應該避免依賴解析toString()方法輸出的代碼。所以這其實不應該是一個問題。
  • 我們還可以在枚舉上添加這個注解。這將產生一個枚舉值跟隨枚舉類名稱的表示,例如,AccounType.SAVING。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    579

    瀏覽量

    20518
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68616
收藏 人收藏

    評論

    相關推薦

    Lombok注解引發的空指針問題分析

    一、問題描述 在一次上線后,日志中出現空指針的報錯,但是報錯代碼位置以及相應工具類未進行過修改,接下來進一步分析。 以下為報錯堆棧信息: ? java.lang.NullPointerException: nullat net.sf.cglib.core.ReflectUtils.getMethodInfo(ReflectUtils.java:424) ~[cglib-3.1.jar:?]at net.sf.cglib.beans.BeanCopier$Generator.generateClass(BeanCopier.java:133) ~[cglib-3.1.jar:?]at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ~[cglib-3.1.jar:?]at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGene
    的頭像 發表于 06-23 09:30 ?1049次閱讀
    <b class='flag-5'>Lombok</b>注解引發的空指針問題分析

    Java項目SaaS移動辦公-Day1-14-搭建子工程lombok插件

    JAVA
    電子學習
    發布于 :2022年12月29日 15:20:12

    Java項目《好客租房》Day4-08.MybatisPlus入門Lombok的使用

    JAVA
    電子學習
    發布于 :2023年01月06日 21:04:32

    SpringBoot2基礎篇-31-實體類快速開發(lombok)#硬聲創作季

    spring
    電子學習
    發布于 :2023年01月10日 12:38:46

    01-spring快速入門-Lombok基本使用#硬聲創作季

    spring
    電子學習
    發布于 :2023年01月15日 12:01:04

    Lombok開發插件使用小技巧

    0x01:Lombok簡介 Lombok 是一款 Java開發插件,使得 Java 開發者可以通過其定義的一些注解來消除業務工程中冗長和繁瑣的代碼,尤其對于簡單的 Java 模型對象(POJO)。在
    的頭像 發表于 06-12 18:07 ?1780次閱讀

    重演自己如何掉入Lombok的戲法陷阱

    ? https://www.ramostear.com/blog/2020/04/28/uk1860p8.html ? 如果您正在閱讀此文,想必您對Project Lombok已經有了一段時間的了解
    的頭像 發表于 10-28 11:29 ?1201次閱讀

    如何實現一個秒殺系統

    實現一個秒殺系統,采用spring boot 2.x + mybatis+ redis + swagger2 + lombok實現。
    的頭像 發表于 09-15 09:56 ?2195次閱讀

    Lombok同時使用@Data和@Builder的一個必須要避開的巨坑

    問題背景 Lombok @Data和@Builder分別單獨分析用法 解決方法 方法一 方法二 Lombok原理 總結 問題背景 Lombok使? 同時使?@Data和@Builder ,構建無參
    的頭像 發表于 10-11 18:14 ?1996次閱讀

    Java注解及其底層原理解析 1

    什么是注解? 當我們開發SpringBoot項目,我們只需對啟動類加上`@SpringBootApplication`,就能自動裝配,不需要編寫冗余的xml配置。當我們為項目添加lombok
    的頭像 發表于 02-09 14:18 ?764次閱讀
    Java注解及其底層原理解析 1

    Java注解及其底層原理解析2

    什么是注解? 當我們開發SpringBoot項目,我們只需對啟動類加上`@SpringBootApplication`,就能自動裝配,不需要編寫冗余的xml配置。當我們為項目添加lombok
    的頭像 發表于 02-09 14:18 ?511次閱讀
    Java注解及其底層原理解析2

    如何寫好 Java 程序代碼

    ? 技術點 開發工具 Bean Bean 的驗證 擁抱 lombok 重構 設計模式 技能 總結 ? 技術點 本文不是一個吹噓的文章,不會講很多高深的架構,相反,會講解很多基礎的問題和寫法問題,如果
    的頭像 發表于 06-27 10:48 ?455次閱讀

    別再用BeanUtils了,這款PO VO DTO轉換神器不香么?

    關于lombok和mapstruct的版本兼容問題多說幾句,maven插件要使用3.6.0版本以上、lombok使用1.16.16版本以上,另外編譯的lombok mapstruct的插件不要忘了加上。
    的頭像 發表于 07-10 10:46 ?564次閱讀
    別再用BeanUtils了,這款PO VO DTO轉換神器不香么?

    Lombok版的構造器注入方式

    做開發的同學可能都會發現, IDEA 在我們經常使用的 @Autowired 注解上添加了警告: Field injection is not recommended, 即: 不推薦使用屬性注入。那怎么解決這個問題呢? 問題原因 違背單一職責原則 因為現在的業務一般都會使用很多依賴, 但擁有太多的依賴通常意味著承擔更多的責任,而這顯然違背了單一職責原則。 依賴Spring @Autowired 由 Spring 提供,而 @Resource 是JSR-250提供的,它是Java標準。前者會警告,而后者不警告,就是因為前者導致了應用與框架的強綁定,若
    的頭像 發表于 09-25 10:50 ?984次閱讀

    Lombok如何派上用場

    Java的 record 關鍵字是Java 14中引入的一個新的語義特性。record 對于創建小型不可變的對象非常有用。另一方面,Lombok 是一個Java庫,可以自動生成一些已知的模式為
    的頭像 發表于 10-08 15:39 ?302次閱讀
    主站蜘蛛池模板: 成年ssswww日本| 色综合色综合色综合色综合| 欧美午夜视频| 91免费视| 四虎最新免费网址| 国产精品美女在线| 久久刺激| 在线亚洲日产一区二区| 看一级特黄a大片日本片| 失禁h啪肉尿出来高h健身房| 亚洲一二三四| 欧美电影一区二区| 色v在线| 免费一区在线观看| 久久综合九色综合97_ 久久久 | 女人大毛片一级毛片一| 亚洲精品私拍国产福利在线| 59日本人xxxxxxxxx69| 日本黄色影片在线观看| 天堂网在线www资源在线| 办公室桌震娇喘视频大全在线 | 黄色免费看视频| 国产情侣露脸| 四虎精品成在线播放| 一级特黄aaa大片| 日本不卡一区二区三区在线观看| 香蕉黄色网| 在线天堂中文| 美女扒开内裤无遮挡禁18| 久久成人亚洲| 大又大粗又爽又黄少妇毛片| 婷婷丁香综合网| 天天天天做夜夜夜做| 中韩日欧美电影免费看| 99久久99久久久99精品齐| 亚洲综合一区二区| 精品视频网站| 22sihu国产精品视频影视资讯| 性欧美高清精品videos| 成年人在线网站| 免费的毛片网站|