为什么抛出upcasting检查异常

Ced*_*Sun 2 java exception-handling upcasting checked-exceptions

我注意到一些复杂库中的方法,包括标准JDK,倾向于throws向上转换异常.起初我在Apache POI的源代码中发现了这种现象,稍后会再次看到它java.io.FileWriter:

public FileWriter(String fileName) throws IOException {
    super(new FileOutputStream(fileName));
}
Run Code Online (Sandbox Code Playgroud)

其中实例化FileOutputStream声明FileNotFoundException此callstack中唯一的已检查异常.然而,IOException声明,这是超级类FileNotFoundException.

那是什么原因呢?还是仅仅依赖于程序员的习惯?

dav*_*xxx 5

避免过于频繁地更改API可能是有意义的.
今天,一个方法可以在代码中引入一个子类,IOexception但明天它可以抛出另一个.

而在签名中声明父的例外是不是过于笼统,不松动的价值,为客户,它似乎确定申报基类除外.
例如,一个不好的用法是声明throw Exception客户端无法理解异常的一般含义并因此处理它.