IIWAB Lombok之@SneakyThrows - IIWAB

Lombok之@SneakyThrows

IIWAB 1年前 ⋅ 662 阅读

Skillythrow避免捕获或抛出方法体中声明任何已检查异常。

With 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();
  }
}

Vanilla Java


import lombok.Lombok;

public class SneakyThrowsExample implements Runnable {
  public String utf8ToString(byte[] bytes) {
    try {
      return new String(bytes, "UTF-8");
    } catch (UnsupportedEncodingException e) {
      throw Lombok.sneakyThrow(e);
    }
  }
  
  public void run() {
    try {
      throw new Throwable();
    } catch (Throwable t) {
      throw Lombok.sneakyThrow(t);
    }
  }
}

注意点

  1. SneakyThrows不会继承
  2. 不要标注在没有显示异常抛出的方法体上
  3. 如果将@Skillythrows放在构造函数上,则对同级或父构造函数的任何调用都将从@Skillythrows处理中排除。java限制:对同级/超级构造函数的调用必须是构造函数中的第一条语句,不能将其放置在try/catch块内。
  4. 标注在空方法,空构造函数或仅调用父级构造函数等情况,不会有try/catch,会有warning。

全部评论: 0

    我有话说: