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

Lombok 的@StandardException注解解析

 更新時(shí)間:2023年05月11日 09:46:23   作者:明明如月學(xué)長(zhǎng)  
@StandardException 是一個(gè)實(shí)驗(yàn)性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我們將使用 Lombok 的 @StandardException 注解自動(dòng)生成異常類型類的構(gòu)造函數(shù),需要的朋友可以參考下

1. 引言

在 Java 應(yīng)用程序中,異常類對(duì)于正確捕獲和處理錯(cuò)誤至關(guān)重要。我們常常在編寫異常處理的重復(fù)代碼上花費(fèi)時(shí)間,而不是關(guān)注應(yīng)用程序的其他方面。

在本教程中,我們將使用 Lombok 的 @StandardException 注解自動(dòng)生成異常類型類的構(gòu)造函數(shù)。此外,我們還將了解其優(yōu)缺點(diǎn)。

2. 什么是 @StandardException?

@StandardException 是一個(gè)實(shí)驗(yàn)性的注解,添加到 Project Lombok 的 v__1.18.22 版本中。該注解適用于任何 Throwable 的子類,并自動(dòng)生成四個(gè)構(gòu)造函數(shù):

  • 一個(gè)無參數(shù)構(gòu)造函數(shù)
  • 一個(gè)僅帶消息的構(gòu)造函數(shù),無異常原因
  • 一個(gè)僅帶異常原因的構(gòu)造函數(shù),無消息
  • 一個(gè)帶有消息和異常原因的標(biāo)準(zhǔn)構(gòu)造函數(shù)

與大多數(shù) Lombok 注解一樣,@StandardException 非常簡(jiǎn)單,我們將在以下部分看到。

2.1. 添加 Lombok 依賴

我們需要使用 Project Lombok 的 v.1.18.22 或更高版本來使用該注解。因此,讓我們將最新的 lombok::1.18.26 添加到我們的 pom.xml 文件中:

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

2.2. 使用類注解

要在我們的異常中使用 @StandardException,我們必須創(chuàng)建一個(gè)擴(kuò)展 Throwable 類或其任何子類的目標(biāo)類。因此,它適用于檢查和未檢查異常以及錯(cuò)誤。

為了說明,讓我們創(chuàng)建一個(gè) CustomException 類:

@StandardException
public class CustomException extends Throwable {
}

由于 CustomException 擴(kuò)展了 Throwable,代碼正常編譯。讓我們看看編譯后生成的代碼:

public class CustomException extends Throwable {
    public CustomException() {
        this((String)null, (Throwable)null);
    }
    public CustomException(String message) {
        this(message, (Throwable)null);
    }
    public CustomException(Throwable cause) {
        this(cause != null ? cause.getMessage() : null, cause);
    }
    public CustomException(String message, Throwable cause) {
        super(message);
        if (cause != null) {
            super.initCause(cause);
        }
    }
}

Lombok 注解的工作方式與實(shí)現(xiàn)自定義異常構(gòu)造函數(shù)的通常 Java 方法不同。通常,JDK 通過調(diào)用指定簽名的 super 構(gòu)造函數(shù)版本來實(shí)現(xiàn)它們。例如,僅包含異常原因的構(gòu)造函數(shù)在其實(shí)現(xiàn)中將調(diào)用 super(cause)。

另一方面,Lombok 的前三個(gè)構(gòu)造函數(shù)依賴于生成的標(biāo)準(zhǔn)構(gòu)造函數(shù)來構(gòu)建異常對(duì)象。標(biāo)準(zhǔn)構(gòu)造函數(shù)調(diào)用 super(message) 來構(gòu)建初始對(duì)象。然后,如果不是 null,它使用 initCause() 方法初始化 CustomException 的原因

在使用注解時(shí),我們必須考慮這兩種實(shí)現(xiàn)的不同細(xì)微差別。

接下來,我們將在下一部分中討論與通常方法相比,@StandardException 的一些優(yōu)點(diǎn)和缺點(diǎn)。

3. 優(yōu)點(diǎn)

使用 @StandardException 的主要優(yōu)點(diǎn)是我們避免了編寫樣板代碼。例如,在純 Java 中創(chuàng)建一個(gè) NumberFormatException 的子類可能是這樣的:

public class CustomNumberFormatException extends NumberFormatException{
    public CustomNumberFormatException() {
        super();
    }
    public CustomNumberFormatException(String s) {
        super(s);
    }
}

在上面的代碼中,我們手動(dòng)使用 NumberFormatException 的可用 super 構(gòu)造函數(shù)創(chuàng)建了構(gòu)造函數(shù)。

在實(shí)際應(yīng)用程序中,該代碼通常會(huì)在異常類之間重復(fù)。因此,我們最終多次復(fù)制粘貼相同的代碼。當(dāng)異常類數(shù)量較多時(shí),這會(huì)更難維護(hù)。

相比之下,**通過使用 @StandardException,我們可以通過一行代碼獲得四個(gè)自動(dòng)生成的構(gòu)造函數(shù)。**因此,它可能會(huì)提高開發(fā)速度并改善代碼可維護(hù)性。

關(guān)于 @StandardException 的另一個(gè)好點(diǎn)是,生成的構(gòu)造函數(shù)僅使用 super(message) 構(gòu)造函數(shù),這在大多數(shù) Java 異常中都存在。因此,我們避免了調(diào)用在父類中不存在的 super 構(gòu)造函數(shù)。例如,NumberFormatException 沒有定義標(biāo)準(zhǔn)和僅異常原因構(gòu)造函數(shù)。因此,在其子類中調(diào)用 super(message, cause) 或 super(cause) 將失敗。

最后,所有使用 @StandardException 的異常都具有 Lombok 實(shí)現(xiàn)的相同行為。由于 Lombok 自動(dòng)生成代碼,我們無法修改它。因此,我們不太可能向使用 @StandardException 注解的類中引入潛在的問題代碼。

4. 缺點(diǎn)

使用代碼生成器的一個(gè)明顯缺點(diǎn)是增加了調(diào)試的復(fù)雜性。在編寫的代碼中調(diào)試和發(fā)現(xiàn)缺陷比在生成的代碼中更容易。因此,如果某些內(nèi)容運(yùn)行不正確,使用 @StandardException 可能會(huì)使調(diào)試會(huì)話變得復(fù)雜

另一個(gè)需要考慮的陷阱是對(duì) Lombok 的依賴。將我們的代碼與 @StandardException 耦合會(huì)增加返回純Java 時(shí)的工作量。此外,如果 Lombok 方面出現(xiàn)問題,將影響所有使用該注解的異常。

5. 結(jié)論

在這篇簡(jiǎn)短的文章中,我們學(xué)習(xí)了如何使用添加到 Lombok 版本 v.1.18.22 的 @StandardException。我們還了解了與純 Java 代碼手動(dòng)實(shí)現(xiàn)相比的一些優(yōu)缺點(diǎn)。

關(guān)鍵是在我們的應(yīng)用程序中平衡其優(yōu)點(diǎn)和缺點(diǎn),而不是濫用它

與往常一樣,源代碼可以在 GitHub 上找到。

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

相關(guān)文章

  • MyEclipse安裝JS代碼提示的教程(Spket插件)

    MyEclipse安裝JS代碼提示的教程(Spket插件)

    本篇文章主要介紹了MyEclipse安裝JS代碼提示的教程(Spket插件),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • springboot實(shí)現(xiàn)maven多模塊和打包部署

    springboot實(shí)現(xiàn)maven多模塊和打包部署

    本文主要介紹了springboot實(shí)現(xiàn)maven多模塊和打包部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • java線性表的存儲(chǔ)結(jié)構(gòu)及其代碼實(shí)現(xiàn)

    java線性表的存儲(chǔ)結(jié)構(gòu)及其代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記第一篇,線性表的存儲(chǔ)結(jié)構(gòu)及其代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Mybatis-Plus分頁(yè)的使用與注意事項(xiàng)

    Mybatis-Plus分頁(yè)的使用與注意事項(xiàng)

    分頁(yè)查詢每個(gè)人程序猿幾乎都使用過,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus分頁(yè)的使用與注意事項(xiàng)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java 反射機(jī)制知識(shí)詳細(xì)介紹及總結(jié)

    Java 反射機(jī)制知識(shí)詳細(xì)介紹及總結(jié)

    反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語(yǔ)言的反射機(jī)制
    2017-01-01
  • 五分鐘帶你學(xué)會(huì)用java解析json字符串

    五分鐘帶你學(xué)會(huì)用java解析json字符串

    這篇文章主要給大家介紹了關(guān)于用java解析json字符串的相關(guān)資料,JSON是一種輕量級(jí)的、基于文本的、與語(yǔ)言無關(guān)的數(shù)據(jù)交換格式,易于人和機(jī)器讀寫,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Springboot2.x結(jié)合Mabatis3.x下Hikari連接數(shù)據(jù)庫(kù)報(bào)超時(shí)錯(cuò)誤

    Springboot2.x結(jié)合Mabatis3.x下Hikari連接數(shù)據(jù)庫(kù)報(bào)超時(shí)錯(cuò)誤

    本文針對(duì)Springboot2.x與Mybatis3.x結(jié)合使用時(shí),Hikari連接數(shù)據(jù)庫(kù)出現(xiàn)超時(shí)錯(cuò)誤的問題進(jìn)行了深入分析,并提供了一系列有效的解決方法,感興趣的可以了解一下
    2023-11-11
  • Apache DolphinScheduler完全設(shè)置東八區(qū)時(shí)區(qū)

    Apache DolphinScheduler完全設(shè)置東八區(qū)時(shí)區(qū)

    這篇文章主要為大家介紹了Apache DolphinScheduler完全設(shè)置東八區(qū)配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java中關(guān)于Null的9個(gè)解釋(Java Null詳解)

    Java中關(guān)于Null的9個(gè)解釋(Java Null詳解)

    這篇文章主要介紹了Java中關(guān)于Null的9個(gè)解釋(Java Null詳解),本文詳細(xì)講解了Java中Null的9個(gè)相關(guān)知識(shí),需要的朋友可以參考下
    2015-01-01
  • java必懂的冷知識(shí)點(diǎn)之Base64加密與解密

    java必懂的冷知識(shí)點(diǎn)之Base64加密與解密

    這篇文章主要介紹了java必懂的冷知識(shí)點(diǎn)之Base64加密與解密的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論