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);
}
}
}
注意点
- SneakyThrows不会继承
- 不要标注在没有显示异常抛出的方法体上
- 如果将@Skillythrows放在构造函数上,则对同级或父构造函数的任何调用都将从@Skillythrows处理中排除。java限制:对同级/超级构造函数的调用必须是构造函数中的第一条语句,不能将其放置在try/catch块内。
- 标注在空方法,空构造函数或仅调用父级构造函数等情况,不会有try/catch,会有warning。
注意:本文归作者所有,未经作者允许,不得转载