在阅读我的代码时,我注意到我的IDE列出了一条警告,其中包含以下消息:
在JDK 7下报告try块中的相同catch部分。可以使用quickfix将部分折叠为多捕获部分。
并且还指定为JDK 7 +
抛出此警告try块如下:
try {
FileInputStream e = new FileInputStream("outings.ser");
ObjectInputStream inputStream = new ObjectInputStream(e);
return (ArrayList)inputStream.readObject();
} catch (FileNotFoundException var3) {
var3.printStackTrace();
} catch (ClassNotFoundException var5) {
var5.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
然而,当删除(抛出该特定警告的catch块)时:
catch (ClassNotFoundException var5) {
var5.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
我仍然会收到错误:
ObjectInputStream inputStream = new ObjectInputStream(e);
return (ArrayList)inputStream.readObject();
我错过了一些我到目前为止还没想到的明显的东西吗?
答案 0 :(得分:112)
所以,既然我在IntelliJ中看到了相同的警告(我认为你也在使用IntelliJ),为什么不让 Alt + 输入(或< kbd>选项 + 返回如果你愿意)告诉你这意味着什么?
如果异常分支相同,你可以将它们折叠起来,并且使用multi-catch语法,你将得到一个与你的三个相同的catch语句:
try {
FileInputStream e = new FileInputStream("outings.ser");
ObjectInputStream inputStream = new ObjectInputStream(e);
return (ArrayList)inputStream.readObject();
} catch (ClassNotFoundException | IOException var3) {
var3.printStackTrace();
}
return null;