Lombok 的@StandardException注解解析

目录
  • 1. 引言
  • 2. 什么是 @StandardException?
    • 2.1. 添加 Lombok 依赖
    • 2.2. 使用类注解
  • 3. 优点
  • 4. 缺点
  • 5. 结论

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注解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 解决Lombok注解不起作用的问题

    Lombok注解不起作用 场景: 减少实体类中如Getter,Setter方法的书写 原因: lombok是一个第三方插件,我们使用时需要进行两个步骤(两个步骤缺一不可): 1:引入lombok依赖 2: 安装lombok插件 作用: Lombok是一个第三方插件,通过它我们可以直接书写注解来代替原来的getter,setter,toString等方法. 深入理解Lombok 说道Lombok,可能会鲜为人知.但是在实际的开发中,它起到了很大的作用,话不多说,直入正题: 一.Lombok是什么

  • Java中lombok的@Builder注解的解析与简单使用详解

    Lombok中@Builder用法 1.建造者模式简介:Builder 使用创建者模式又叫建造者模式.简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程. 2.注解类Builder.java注释: * The builder annotation creates a so-called 'builder' aspect to the class that is annotated or the class  * that contains a mem

  • Lombok的@Data等注解无效的解决

    一.已定义好的实体类 二.调用时没有get,set访问器 在用@Data注解时,没有生成setter/getter方法.百度了一堆都没解决方法,后来用Google查了一下解决了~~~ 使用IDEA需要安装Lombok插件,我这里已经下载好,如果没下载安装点击install进行下载安装即可~~~ 到此这篇关于Lombok的@Data等注解无效的解决的文章就介绍到这了,更多相关Lombok的@Data注解无效内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • Lombok注解之@SuperBuilder--解决无法builder父类属性问题

    目录 一.老规矩 二.判断是否为相同问题(@Builder注解不能 build 父类属性) 三.@SuperBuilder注解 1. 概念(需要注意您的Lombok版本) 2. 如何解决无法builder父类属性 3. 遇到的一个小坑(Lombok1.18.2) 四.总结 前言:Lombok的小坑之 @Builder注解不能 build 父类属性 正文在第三个目录下,学习@SuperBuilder注解的话可以直接根据目录跳到正文所在 一.老规矩 先上文档官方文档链接@SuperBuilder 二

  • Lombok基本注解之@SneakyThrows的作用

    使用范围: 只能作用在方法和构造函数之上 @SneakyThrows注解的作用得从java的异常设计体系说起. java中常见的异常有两种: Exception即非运行时异常(编译异常). RuntimeException即运行时异常. 第一种会强制要求抛出它的方法声明throws,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过.设计的目的是为了提醒开发者处理一些场景中必然可能存在的异常情况.比如网络异常造成IOException. 但是现实,往往事与愿违.大部分情况下的异

  • Lombok中@Builder和@SuperBuilder注解的用法案例

    目录 Lombok中@Builder和@SuperBuilder注解的用法 @Singular 注解修饰集合 @Builder.Default @SuperBuilder @SuperBuilder(toBuilder=true) PS:java Lombok下解决@Builder继承解决方法(@SuperBuilder) Lombok中@Builder和@SuperBuilder注解的用法 @Builder 是 lombok 中的注解.可以使用builder()构造的Person.Person

  • spring springMVC中常用注解解析

    一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描.配置项就配置了对指定的包进行扫描,以实现依赖注入. <?xml version="1.0" encoding="UTF-8"?> <span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans&q

  • 这一次搞懂Spring自定义标签以及注解解析原理说明

    前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的.同时我们常用的注解如:@Service.@Component.@Controller标注的类也是需要在xml中配置<context:component-scan>才能自动注入到IOC容器中,所以本篇也会重点分析注解解析原理. 正文 自定义标签解析原理 在上一篇分析默认标签解析时看到过这个类DefaultBeanDefinit

  • Spring注解解析之@ImportResource

    一.ImportResource 1.1 定义包和类 首先定义一个不会被ComponentScan扫描到的包outpackage,如下: 在该包内创建一个类: package outpackage; import org.springframework.stereotype.Service; @Service public class HelloService1 { public void method1() { System.out.println("class:HelloService1__

  • Springboot中使用lombok的@Data注解方式

    目录 Springboot 使用lombok的@Data注解 idea安装lombok插件 创建项目,编写实体类 编写测试类 测试结果 springBoot 注解@Data注入失败 一.Files--Seetings--Plugins 二.如果重启后仍注入失败 Springboot 使用lombok的@Data注解 idea安装lombok插件 点击setting,选择plugins,搜索lombok安装即可. 创建项目,编写实体类 安装好插件后需要重启idea,然后创建一个springboot

  • 一次由Lombok的@AllArgsConstructor注解引发的错误及解决

    目录 由Lombok的@AllArgsConstructor注解引发的错误 查了资料这里简单解释一下 按照上面注解的解释 @AllArgsConstructor lombok注解踩坑记录 这里记录一下使用注意点 由Lombok的@AllArgsConstructor注解引发的错误 需求:在Service实现中写了一个方法调用第三方接口同步数据. 功能代码不做展示,比较普通的调用接口返回JSON数据. 直接看SpringBoot启动的报错信息: Parameter 3 of constructor

  • Intellij IDEA 2017.3使用Lombok及常用注解介绍

    前言 不知道大家在创建一个实体类的时候,有没有发现每次定义好属性之后,都需要手动右键Generate构建getter.setter和toString()之类的方法,假设很多实体类的话,工程量就增加了,为提高开发效率且代码优雅,特给大家推荐一下Lombok神器. 简介 Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为您的Java增光添彩.永远不需要再写另一个getter或equals方法,带有一个注释之后您的类有一个功能全面的生成器,自动化您的日志记录变量等等. 使用

  • SpringBoot配置lombok与logback过程解析

    一 什么是lombok 在写Java程序的时候经常会遇到如下情形:新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter,setter方法还有构造函数等 . lombok项目的产生就是为了省去我们手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter方法. 即它最终能够达到的效果是:在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法. 二 lombo

  • 使用Lombok的@Builder注解带来的两大坑

    目录 一.@Data和@Builder导致无参构造丢失 二.@Builder注解导致默认值无效 三.分析原因 四.总结 一.@Data和@Builder导致无参构造丢失 单独使用@Data注解,是会生成无参数构造方法. 单独使用@Builder注解,发现生成了全属性的构造方法. @Data和@Builder一起用:我们发现没有了默认的构造方法.如果手动添加无参数构造方法或者用@NoArgsConstructor注解都会报错! 两种解决方法 1.构造方法加上@Tolerate 注解,让lombok

  • 这一次搞懂Spring事务注解的解析方式

    前言 事务我们都知道是什么,而Spring事务就是在数据库之上利用AOP提供声明式事务和编程式事务帮助我们简化开发,解耦业务逻辑和系统逻辑.但是Spring事务原理是怎样?事务在方法间是如何传播的?为什么有时候事务会失效?接下来几篇文章将重点分析Spring事务源码,让我们彻底搞懂Spring事务的原理. 正文 XML标签的解析 <tx:annotation-driven transaction-manager="transactionManager"/> 配置过事务的应该

随机推荐