在Java中,我想做这样的事情:
try {
...
} catch (/* code to catch IllegalArgumentException, SecurityException,
IllegalAccessException, and NoSuchFieldException at the same time */) {
someCode();
}
…而不是:
try {
...
} catch (IllegalArgumentException e) {
someCode();
} catch (SecurityException e) {
someCode();
} catch (IllegalAccessException e) {
someCode();
} catch (NoSuchFieldException e) {
someCode();
}
有什么办法可以做到这一点吗?
从Java 7开始,这已经成为可能。多捕获块的语法为:
try {
...
} catch (IllegalArgumentException | SecurityException | IllegalAccessException |
NoSuchFieldException e) {
someCode();
}
但请记住,如果所有异常都属于同一类层次结构,则只需捕获该基本异常类型即可。
另请注意,如果直接或间接从 继承,则无法在同一块中捕获两者。编译器将抱怨:ExceptionA
ExceptionB
ExceptionB
ExceptionA
Alternatives in a multi-catch statement cannot be related by subclassing
Alternative ExceptionB is a subclass of alternative ExceptionA
此问题的解决方法是仅在例外列表中包含祖先异常,因为它还将捕获后代类型的异常。
不完全是在Java 7之前,但是,我会做这样的事情:
Java 6 及更早版本
try {
//.....
} catch (Exception exc) {
if (exc instanceof IllegalArgumentException || exc instanceof SecurityException ||
exc instanceof IllegalAccessException || exc instanceof NoSuchFieldException ) {
someCode();
} else if (exc instanceof RuntimeException) {
throw (RuntimeException) exc;
} else {
throw new RuntimeException(exc);
}
}
爪哇 7
try {
//.....
} catch ( IllegalArgumentException | SecurityException |
IllegalAccessException| NoSuchFieldException exc) {
someCode();
}
否,在 Java 7 之前,每个客户一个。
你可以捕获一个超类,比如java.lang.Exception,只要你在所有情况下都采取相同的操作。
try {
// some code
} catch(Exception e) { //All exceptions are caught here as all are inheriting java.lang.Exception
e.printStackTrace();
}
但这可能不是最佳做法。只有当你有一个实际处理它的策略时,你才应该捕获异常 – 并且日志记录和重新抛出不是“处理它”。如果您没有纠正措施,最好将其添加到方法签名中,并让它冒泡给可以处理这种情况的人。
使用 JDK 7 及更高版本,您可以执行以下操作:
try {
...
} catch (IllegalArgumentException | SecurityException | IllegalAccessException | NoSuchFieldException e) {
someCode();
}
模板简介:该模板名称为【java如何解决仅在例外列表中包含祖先异常】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。