首页 > Java > java如何解决仅在例外列表中包含祖先异常

java如何解决仅在例外列表中包含祖先异常

上一篇 下一篇

在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();
}

但请记住,如果所有异常都属于同一类层次结构,则只需捕获该基本异常类型即可。

另请注意,如果直接或间接从 继承,则无法在同一块中捕获两者。编译器将抱怨:ExceptionAExceptionBExceptionBExceptionA

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】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 190次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-09
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信模板 微信文章 微信素材 企业网站 html5 自适应 微信公众平台 响应式 单页式简历模板 微信图片
您可能会喜欢的其他模板