lombok的SneakyThrows究竟还原成什么代码它的用法
Posted 石头StoneWang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lombok的SneakyThrows究竟还原成什么代码它的用法相关的知识,希望对你有一定的参考价值。
背景
@SneakyThrows
这个 lombok 的注解背后生成的代码是什么样的?
这个注解可以放在方法上(含静态)或构造方法上
作用:其实就是用 try-catch 将方法的代码包起来。用 Throwable 接收可以接住一切
1、可用于:构造方法、普通方法、静态方法。不可放在类里。
2、它是使用 Throwable 作为 catch 的参数 (而不是Exception),所以不用担心有catch不到的
3、并不是像他的名字 “sneaky” 一样偷偷地catch住异常并吞掉,还是会抛出来的,放心。
4、它有点奇怪,用不了 IDEA 的 refactor 得到 delombok 结果 (见附录)
附录
1、这里列出了使用 @SneakyThrows其实际的源码是什么
package com.wyf.test.junittestcoverage.main;
import lombok.SneakyThrows;
import java.io.FileInputStream;
public class Test
// 运行时异常的情况加上这个
@SneakyThrows
public Test()
int i = 7 / 0;
@SneakyThrows
public Test(int i)
FileInputStream fis = new FileInputStream("/在构造方法里写这个/");
// 运行时异常的情况加上这个
@SneakyThrows
public void testRuntimeException()
int i = 8 / 0;
// 已检查异常
@SneakyThrows
public void testCheckedException()
FileInputStream fis = new FileInputStream("/在普通方法里写的这个方法/");
// 运行时异常的情况加上这个
@SneakyThrows
public static void testRuntimeException2()
int i = 9 / 0;
// 已检查异常
@SneakyThrows
public static void testCheckedException2()
FileInputStream fis = new FileInputStream("/在静态方法里写的这个方法/");
还原后得到:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.wyf.test.junittestcoverage.main;
import java.io.FileInputStream;
public class Test
public Test()
try
int var1 = 7 / 0;
catch (Throwable var2)
throw var2;
public Test(int i)
try
new FileInputStream("/在构造方法里写这个/");
catch (Throwable var3)
throw var3;
public void testRuntimeException()
try
int var1 = 8 / 0;
catch (Throwable var2)
throw var2;
public void testCheckedException()
try
new FileInputStream("/在普通方法里写的这个方法/");
catch (Throwable var2)
throw var2;
public static void testRuntimeException2()
try
int var0 = 9 / 0;
catch (Throwable var1)
throw var1;
public static void testCheckedException2()
try
new FileInputStream("/在静态方法里写的这个方法/");
catch (Throwable var1)
throw var1;
2、如下,单使用 @SneakyThrows bing
即使能 Delombok,但是,@SneakyThrows 却还是不能,如下图
以上是关于lombok的SneakyThrows究竟还原成什么代码它的用法的主要内容,如果未能解决你的问题,请参考以下文章