java - 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
呢?
解决方案
IllegalArgumentException
是 的子类RuntimeException
:
RuntimeException 及其子类是未经检查的异常。如果未经检查的异常可以通过方法或构造函数的执行抛出并传播到方法或构造函数边界之外,则不需要在方法或构造函数的 throws 子句中声明它们。
推荐阅读
- python - Python - 如何创建可变的返回变量?
- android - Android:为什么 BluetoothLeScanner 有时无法发现任何 BLE 设备?
- laravel - 平面 Laravel 集合到树
- angular - Angular 区域外的 http 持久调用
- python - 嗨,我怎样才能增加for循环中的值“i”
- haskell - 如何为此 GADT 编写序列化实例?
- c++ - 如果您在函数中声明了 const int,您是否必须释放它?
- javascript - @emotion 使用@material-ui v5 将样式表注入到项目中,但我自己没有在任何地方定义 CSS 规则
- github - Helm 图表使用
- google-cloud-storage - 在 kubernetes 运算符中访问 GOOGLE_APPLICATION_CREDENTIALS