Lombok 的@StandardException注解解析

 更新时间:2023年05月11日 09:46:23   作者:明明如月学长  
@StandardException 是一个实验性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我们将使用 Lombok 的 @StandardException 注解自动生成异常类型类的构造函数,需要的朋友可以参考下

1. 引言

在 Java 应用程序中,异常类对于正确捕获和处理错误至关重要。我们常常在编写异常处理的重复代码上花费时间,而不是关注应用程序的其他方面。

在本教程中,我们将使用 Lombok 的 @StandardException 注解自动生成异常类型类的构造函数。此外,我们还将了解其优缺点。

2. 什么是 @StandardException?

@StandardException 是一个实验性的注解,添加到 Project Lombok 的 v__1.18.22 版本中。该注解适用于任何 Throwable 的子类,并自动生成四个构造函数:

  • 一个无参数构造函数
  • 一个仅带消息的构造函数,无异常原因
  • 一个仅带异常原因的构造函数,无消息
  • 一个带有消息和异常原因的标准构造函数

与大多数 Lombok 注解一样,@StandardException 非常简单,我们将在以下部分看到。

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,我们必须创建一个扩展 Throwable 类或其任何子类的目标类。因此,它适用于检查和未检查异常以及错误

为了说明,让我们创建一个 CustomException 类:

@StandardException
public class CustomException extends Throwable {
}

由于 CustomException 扩展了 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 注解的工作方式与实现自定义异常构造函数的通常 Java 方法不同。通常,JDK 通过调用指定签名的 super 构造函数版本来实现它们。例如,仅包含异常原因的构造函数在其实现中将调用 super(cause)。

另一方面,Lombok 的前三个构造函数依赖于生成的标准构造函数来构建异常对象。标准构造函数调用 super(message) 来构建初始对象。然后,如果不是 null,它使用 initCause() 方法初始化 CustomException 的原因

在使用注解时,我们必须考虑这两种实现的不同细微差别。

接下来,我们将在下一部分中讨论与通常方法相比,@StandardException 的一些优点和缺点。

3. 优点

使用 @StandardException 的主要优点是我们避免了编写样板代码。例如,在纯 Java 中创建一个 NumberFormatException 的子类可能是这样的:

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

在上面的代码中,我们手动使用 NumberFormatException 的可用 super 构造函数创建了构造函数。

在实际应用程序中,该代码通常会在异常类之间重复。因此,我们最终多次复制粘贴相同的代码。当异常类数量较多时,这会更难维护。

相比之下,**通过使用 @StandardException,我们可以通过一行代码获得四个自动生成的构造函数。**因此,它可能会提高开发速度并改善代码可维护性。

关于 @StandardException 的另一个好点是,生成的构造函数仅使用 super(message) 构造函数,这在大多数 Java 异常中都存在。因此,我们避免了调用在父类中不存在的 super 构造函数。例如,NumberFormatException 没有定义标准和仅异常原因构造函数。因此,在其子类中调用 super(message, cause) 或 super(cause) 将失败。

最后,所有使用 @StandardException 的异常都具有 Lombok 实现的相同行为。由于 Lombok 自动生成代码,我们无法修改它。因此,我们不太可能向使用 @StandardException 注解的类中引入潜在的问题代码

4. 缺点

使用代码生成器的一个明显缺点是增加了调试的复杂性。在编写的代码中调试和发现缺陷比在生成的代码中更容易。因此,如果某些内容运行不正确,使用 @StandardException 可能会使调试会话变得复杂

另一个需要考虑的陷阱是对 Lombok 的依赖。将我们的代码与 @StandardException 耦合会增加返回纯Java 时的工作量。此外,如果 Lombok 方面出现问题,将影响所有使用该注解的异常

5. 结论

在这篇简短的文章中,我们学习了如何使用添加到 Lombok 版本 v.1.18.22 的 @StandardException。我们还了解了与纯 Java 代码手动实现相比的一些优缺点。

关键是在我们的应用程序中平衡其优点和缺点,而不是滥用它

与往常一样,源代码可以在 GitHub 上找到

到此这篇关于Lombok 的@StandardException注解介绍的文章就介绍到这了,更多相关Lombok @StandardException注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中Arrays的介绍及使用方法示例

    Java中Arrays的介绍及使用方法示例

    这篇文章主要给大家介绍了关于Java中Arrays及使用方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java.SE数组的一些常见练习题

    Java.SE数组的一些常见练习题

    数组可以看成是相同类型元素的一个集合,在内存中是一段连续的空间,这篇文章主要给大家介绍了关于Java.SE数组的一些常见练习题,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • 在SpringBoot中无缝整合Dubbo的实现过程

    在SpringBoot中无缝整合Dubbo的实现过程

    微服务架构已经成为现代应用开发的热门趋势,而Dubbo作为一款强大的分布式服务框架,与Spring Boot的结合是构建高性能微服务应用的理想选择,本文将详细介绍如何在SpringBoot中无缝整合Dubbo,需要的朋友可以参考下
    2024-01-01
  • SpringBoot集成极光推送的实现代码

    SpringBoot集成极光推送的实现代码

    工作中经常会遇到服务器向App推送消息的需求,一般企业中选择用极光推送的比较多,本文就介绍了SpringBoot集成极光推送的实现代码,感兴趣的可以了解一下
    2023-08-08
  • 树,二叉树(完全二叉树,满二叉树)概念图解

    树,二叉树(完全二叉树,满二叉树)概念图解

    今天小编就为大家分享一篇关于二叉树的图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧,希望能对你有所帮助
    2021-07-07
  • Eclipse设定文件的默认打开方式的具体操作步骤

    Eclipse设定文件的默认打开方式的具体操作步骤

    以下是对Eclipse设定文件的默认打开方式的具体操作步骤进行了详细的介绍,需要的朋友可以过来参考下
    2013-08-08
  • SpringBoot中时间格式化的五种方法汇总

    SpringBoot中时间格式化的五种方法汇总

    时间格式化在项目中使用频率是非常高的,这篇文章主要给大家介绍了关于SpringBoot中时间格式化的五种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • jvm信息jmap使用的基本方法教程

    jvm信息jmap使用的基本方法教程

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,下面这篇文章主要给大家介绍了关于jvm信息jmap使用的基本方法教程,需要的朋友可以参考下
    2018-08-08
  • Java批量插入数据的代码实现

    Java批量插入数据的代码实现

    日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,我们就会用到分批插入数据,所以本文给大家介绍了Java批量插入数据的代码实现,需要的朋友可以参考下
    2024-01-01
  • Spring IoC容器知识点详解

    Spring IoC容器知识点详解

    在本篇文章里小编给各位整理的是关于Spring IoC容器的相关知识点内容,有需要的朋友们可以学习下。
    2019-09-09

最新评论