java - Lombok 注解@SneakyThrows

标签 java lombok

我对@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/

相关文章:

java - lombok 生成器使用 hibernate 列表创建问题

java - 如何将 lombok 和 JPAMetalModel 处理器与 maven 合并

java - 从支持 bean 导航到外部 URL?

java - 映射 Java 的接口(interface)方法

java - 如何用Lombok Date And Collections定义不可变?

android - Parceler 和 Lombok 不能一起工作?

java - 使用RSocketFactory的替换

java - 使用 JPA/Hibernate 构造函数表达式防止 "n+1 selects"?

java - 单击 ListView 将 Firebase 数据从一个 Activity 传递到另一个 Activity

java - Google Gson 将每个 JSON 本地文件视为字符串,即使它不是