Mar*_*son 9 java types java-7 multi-catch
这是一段不能编译的代码:
void multiCatch()
{
try {
throwIOFile();
}
// FileNotFoundException extends IOException, hence this
// does not compile ("alternatives" related by sub classing):
catch (IOException | FileNotFoundException e) { }
}
void throwIOFile() throws IOException, FileNotFoundException
{}
Run Code Online (Sandbox Code Playgroud)
一切都像魅力一样,没有与子类别相关的异常类型.如果您IOException在我的代码片段中交换说.. SQLException,它可以工作.该规范内容如下:
如果类型的并集包含两个备选Di和Dj(i≠j),则其是编译时错误,其中Di是Dj的子类型.
我无法理解这背后的理由.当然,我的例子中的多次捕获是完全多余的,因为我也可以只捕获一个IOException.但是,使我的代码片段合法会有什么危害?当然,违法行为必然会造成伤害吗?
m0s*_*it0 11
在同一个catch中包含给定异常的子类根本没有任何意义,而且令人困惑,因为无论你指定的子类,无论如何都要输入catch.例如,你为什么要写
catch (IOException | FileNotFoundException e)
Run Code Online (Sandbox Code Playgroud)
如果
catch (IOException e)
Run Code Online (Sandbox Code Playgroud)
会有完全相同的行为吗?这简直令人困惑.
规范讨论
可以将多捕获子句视为一系列单捕获子句
所以你的代码有点像
try {
throwIOFile();
}
catch (IOException e) { }
catch (FileNotFoundException e) { } // error
Run Code Online (Sandbox Code Playgroud)
这也被javac拒绝。在这种情况下,错误是合理的,因为第二子句不可访问。
但是,我不认为工会类型应该被禁止。充其量应该是一个警告。
| 归档时间: |
|
| 查看次数: |
4284 次 |
| 最近记录: |