我对@SneakyThrows 可用于偷偷抛出已检查的异常有疑问,而无需在您的方法的 throws 子句中实际声明它。
public class Demo {
public static void main(String[] args) {
}
private void throwE() throws ClassNotFoundException {
}
@SneakyThrows
private void t() {
throwE();
}
}
这里是lombok生成的
public class Demo {
public Demo() {
}
public static void main(String[] args) throws IOException {
}
private void throwE() throws ClassNotFoundException {
}
private void t() {
try {
this.throwE();
} catch (Throwable var2) {
throw var2;
}
}
}
为什么 lombok 生成的代码可以在不声明 throws 子句的情况下伪造编译器。
最佳答案
参见 @SneakyThrows ,它使用 Lombok.sneakyThrow(t)
而不是 var2
:
public void run() { try { throw new Throwable(); } catch (Throwable t) { throw Lombok.sneakyThrow(t); } }
关于java - Lombok 注解@SneakyThrows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53412437/