广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Lombok基本注解之@SneakyThrows的作用
  • 210
分享到

Lombok基本注解之@SneakyThrows的作用

2024-04-02 19:04:59 210人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

使用范围: 只能作用在方法和构造函数之上 @SneakyThrows注解的作用得从java的异常设计体系说起。 java中常见的异常有两种: Exception即非运行时异常(编译

使用范围: 只能作用在方法和构造函数之上

@SneakyThrows注解的作用得从java的异常设计体系说起。

java中常见的异常有两种:

  1. Exception即非运行时异常(编译异常)。
  2. RuntimeException即运行时异常。

第一种会强制要求抛出它的方法声明throws,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。设计的目的是为了提醒开发者处理一些场景中必然可能存在的异常情况。比如网络异常造成IOException。

但是现实,往往事与愿违。大部分情况下的异常,我们都是一路往外抛了事。所以渐渐的大家处理Exception的常见手段就是外面包一层RuntimeException,接着往上丢。这种解决思想尤其在spring中到处出现。参见《Spring in Action》

	try {
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

Lombok的@SneakyThrows就是为了消除这样的模板代码。

使用注解后不需要担心Exception的处理

@SneakyThrows
   public void utf8ToString(byte[] bytes) {
       return new String(bytes, "UTF-8");
   }

真正生成的代码

public void utf8ToString(byte[] bytes) {
       try {
      return new String(bytes, "UTF-8");
    } catch (Exception e) {
      throw Lombok.sneakyThrow(e);
    }
}    

原理:

显然魔法藏在throw Lombok.sneakyThrow(e); 中。可能大家都会以为这个方法就是new RuntimeException()之类的。然而事实并非如此。阅读代码可以看出整个方法其实最核心的逻辑是throw (T) t;,利用泛型将我们传入的Throwable强转为RuntimeException。虽然事实上我们不是RuntimeException。但是没关系,因为JVM并不关心这个。泛型最后存储为字节码时并没有泛型的信息。这样写只是为了骗过javac编译器。

public static RuntimeException sneakyThrow(Throwable t) {
        if (t == null) throw new NullPointerException("t");
        return Lombok.<RuntimeException>sneakyThrow0(t);
    }

    private static <T extends Throwable> T sneakyThrow0(Throwable t) throws T {
        throw (T)t;
    }

总结

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

--结束END--

本文标题: Lombok基本注解之@SneakyThrows的作用

本文链接: https://www.lsjlt.com/news/163081.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Lombok基本注解之@SneakyThrows的作用
    使用范围: 只能作用在方法和构造函数之上 @SneakyThrows注解的作用得从java的异常设计体系说起。 java中常见的异常有两种: Exception即非运行时异常(编译...
    99+
    2022-11-13
  • Lombok注解-@SneakyThrows的使用
    目录Lombok注解@SneakyThrows原理lombok注解@SneakyThrows探索及与try catch、throws Exception区别导入 Maven方法测试L...
    99+
    2022-11-13
  • 解决Lombok注解不起作用的问题
    Lombok注解不起作用 场景: 减少实体类中如Getter,Setter方法的书写 原因: lombok是一个第三方插件,我们使用时需要进行两个步骤(两个步骤缺一不可): 1:引入...
    99+
    2022-11-12
  • 如何解决Lombok注解不起作用的问题
    本篇内容介绍了“如何解决Lombok注解不起作用的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Lombok注解不起作用场景:减少实体类...
    99+
    2023-06-20
  • JavaSpring注解之@Async的基本用法和示例
    目录背景异步调用@Async介绍在Spring中启用@Async示例一:基本使用方式示例二:在同一个类中调用异步方法示例三:异步方法是static方法示例四:在方法级别上修改默认的执...
    99+
    2022-11-13
  • Android注解ButterKnife的基本使用
    ButterKnife的最新版本是8.4.0。 首先,需要导入ButterKnife的jar包。 在AndroidStudio中,File->Project Struct...
    99+
    2022-06-06
    butterknife Android
  • Python基础之Numpy的基本用法详解
    一、数据生成 1.1 手写数组 a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) # 一维数组 b = np.array([[1, 2], [3, 4]]) #二维...
    99+
    2022-06-02
    Python Numpy用法 Python Numpy
  • 基于springmvc之常用注解,操作传入参数
    目录springmvc常用注解,操作传入参数@RequestParam@RequestBody@PathVariable@RequestHeader@CookieValue@Mode...
    99+
    2022-11-12
  • Java OpenCV学习之Mat的基本操作详解
    目录使用OpenCV时你需要补充的知识Mat对象Mat划线Mat在己有图片上加圆圈ImageShowAddCircle.javaImageViewer.javaMat与Image互转...
    99+
    2022-11-13
  • java高并发之线程的基本操作详解
    目录新建线程终止线程线程中断等待(wait)和通知(notify)挂起(suspend)和继续执行(resume)线程等待线程结束(join)和谦让(yeild)总结新建线程 新建线...
    99+
    2022-11-12
  • Python NumPy教程之数组的基本操作详解
    目录Numpy中的N维数组(ndarray)数组创建数组索引基本操作数据类型Numpy中的N维数组(ndarray) Numpy 中的数组是一个元素表(通常是数字),所有元素类型相同...
    99+
    2022-11-11
  • 减少代码开发工作的Java库lombok及注解的使用学习
    目录前言Lombok是什么安装对于eclipse对于 IDEAQuickStart@Setter/@Getter@ToStringexclude 参数doNotUseGetters ...
    99+
    2022-11-13
  • Pandas中DataFrame的基本操作之重新索引讲解
    目录Pandas DataFrame之重新索引1.reindex可以对行和列索引2.reindex插值处理Pandas DataFrame重置索引案例Pandas DataFrame...
    99+
    2022-11-11
  • Java基础之详解基本数据类型的使用
    一、整型 主要扩展一下不同进制的整型 二进制、八进制、十进制、十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写...
    99+
    2022-11-12
  • Java之Jackson的基本使用案例讲解
    Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看...
    99+
    2022-11-12
  • Django的基本运用之Django垃圾分类详解
    title: 利用Django实现一个能与用户交互的初级框架 author: Sun-Wind date: September 1, 2021 Django实现基本的框架 ...
    99+
    2022-11-12
  • PHP数据库学习之详解PDO的基本用法
    PHP PDO是PHP数据库扩展中的一种重要组件,它为PHP与多种关系型数据库提供了统一的API,使用PDO可以让我们的程序更加安全、高效、易于维护。在本文中,我们将介绍PHP PDO的用法,包括如何连接数据库、执行SQL语句、事务处理等方...
    99+
    2023-05-14
    php pdo
  • Python基本结构之判断语句的用法详解
    目录逻辑控制数字逻辑条件条件控制if - 用法 if - else 用法 if 嵌套 练习题→猜数字小游戏说明 逻辑控制 逻辑控制其...
    99+
    2022-11-11
  • Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用
    目录一、csv.writer()方法的基本使用二、csv.DictWriter()方法的基本使用总结 一、csv.writer()方法的基本使用 示例代码1: import...
    99+
    2022-11-11
  • JAVA基础之注解与反射的使用方法和场景
    目录注解注解定义使用场景内置注解 元注解反射加载配置文件反射获取Class反射获取 Constructor反射获取 Method反射获取 Field通过反射获取注解信息内省...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作