Lombok注解-@SneakyThrows

突然想起之前看的一篇文章,涉及到异常处理的一个注解,却发现已经没有记忆了,所以赶紧找到原文记录一下。

编译时异常会强制要求我们来进行处理,要么try-catch,要么直接往外抛,设计的最初目的是为了提醒开发人员注意这些异常,比如IOException。但是有些异常实在是处理不了,只有往外抛,但是这好像不太合理,渐渐的程序猿想到了直接封装一下,让编译器认为它是一个运行时异常,并不需要我现在显示处理:

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

所以Lombok为我们考虑消除这样的模板代码:

 import lombok.SneakyThrows;

public class SneakyThrowsExample implements Runnable {
  @SneakyThrows(UnsupportedEncodingException.class)
  public String utf8ToString(byte[] bytes) {
    return new String(bytes, "UTF-8");
  }
  
  @SneakyThrows
  public void run() {
    throw new Throwable();
  }
}

我们可以直接在方法上使用@SneakyThrows注解,虽然事实上我们不是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;
    }

参考文章:https://www.jianshu.com/p/7d0ed3aef34b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值