• @SneakyThrows注解


     

    作用

    @SneakyThrows就是使用该注解后不需要担心Exception的异常处理。

    在说Exception之前,我们先简单聊下Error和Exception的差异

    Error和Exception


    Error是编译时错误和系统错误,系统错误在非特殊情况下,基本不会出现。而编译时错误,如果你使用了编译器,那么编译器会提示。

    Exception则是可以被抛出的基本类型,我们需要主要关心的也是这个类。
    Exception又可以根据运行时间来看,可以分为RunTimeException和其他Exception。

    RunTimeException和其他Exception


    其他Exception,受检查异常。可以理解为错误,必须要开发者解决以后才能编译通过,解决的方法有两种,
    1:throw到上层,
    2,try-catch处理。

    RunTimeException:运行时异常,又称不受检查异常,不受检查,因为不受检查,所以在代码中可能会有RunTimeException时Java编译检查时不会告诉你有这个异常,但是在实际运行代码时则会暴露出来。如果不处理也会被Java处理。 例如报500异常。

    @SneakyThrows的作用

    现实大部分情况下的异常,我们都是一路往外抛了事。所以渐渐的java程序员处理Exception的常见手段就是外面包一层RuntimeException,接着往上丢

    1. try{
    2. }catch(Exception e){
    3. throw new RuntimeException(e);
    4. }


    而Lombok的@SneakyThrows就是为了消除这样的模板代码。
    使用注解后不需要担心Exception的处理
     

    1. import lombok.SneakyThrows;
    2. public class SneakyThrowsExample implements Runnable {
    3.   @SneakyThrows(UnsupportedEncodingException.class)
    4.   public String utf8ToString(byte[] bytes) {
    5.     return new String(bytes, "UTF-8");
    6.   }
    7.   
    8.   @SneakyThrows
    9.   public void run() {
    10.     throw new Throwable();
    11.   }
    12. }



    起通过编译器生成真正的代码:

    1. import lombok.Lombok;
    2. public class SneakyThrowsExample implements Runnable {
    3.   public String utf8ToString(byte[] bytes) {
    4.     try {
    5.       return new String(bytes, "UTF-8");
    6.     } catch (UnsupportedEncodingException e) {
    7.       throw Lombok.sneakyThrow(e);
    8.     }
    9.   }
    10.   
    11.   public void run() {
    12.     try {
    13.       throw new Throwable();
    14.     } catch (Throwable t) {
    15.       throw Lombok.sneakyThrow(t);
    16.     }
    17.   }
    18. }

    总结

    总的来说,SneakyThrows注解就是减少了代码量,让代码看起来更加的整洁。

    然后在编译的时候。Lombok会帮我们把try{}catch()再加上去。

    参考:https://blog.csdn.net/qq_22162093/article/details/115486647

  • 相关阅读:
    最优传输(Optimal Transport)
    数据分析,从了解你的数据开始,数据探索性分析工具包pandas-profiling
    opencv进阶 ——(十一)基于RMBG实现生活照生成寸照
    Go通道机制与应用详解
    图像处理ASIC设计方法 笔记6 数据拼接和帧格式校正
    机器如何快速学习数据采集
    [附源码]Python计算机毕业设计Django天狗电子商城系统
    Centos7 安装mysql 8.0.34并设置不区分大小写
    DeepMind 利用无监督学习开发 AlphaMissense,预测 7100 万种基因突变
    【剑指Offer】11-15题(二分+DFS+BFS+DP+简单位运算)
  • 原文地址:https://blog.csdn.net/m290345792/article/details/125510133