首页 > 解决方案 > lambda 不需要异常处理

问题描述

想象一下有这个方法:

public static File[] listDirectoryFiles(File directory) throws IllegalArgumentException {
    if (!directory.isDirectory())
        throw new IllegalArgumentException("Enter a directory");
    return directory.listFiles(File::isDirectory);
}

然后这样称呼它:

File myDir = new File("C:\\Users\\bobby\\Downloads");
Arrays.asList(listDirectoryFiles(myDir)).forEach(System.out::println);

既然签名包含throws IllegalArgumentException,为什么不需要实际try-catch调用listDirectoryFiles呢?

标签: javaexceptionlambda

解决方案


IllegalArgumentException是 的子类RuntimeException

RuntimeException 及其子类是未经检查的异常。如果未经检查的异常可以通过方法或构造函数的执行抛出并传播到方法或构造函数边界之外,则不需要在方法或构造函数的 throws 子句中声明它们。


推荐阅读