为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在不使用多个 catch 语句的情况下捕获多个异常并对它们执行不同的逻辑?

是否可以在不使用多个 catch 语句的情况下捕获多个异常并对它们执行不同的逻辑?

jeck猫 2021-05-31 13:06:53
至于对异常执行不同的逻辑。如下:catch (IOException e | IllegalArgumentException a) {       e.doStuff();       a.doStuff();    }
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

那没有意义。当您使用multi catch 时,您就是在暗示:所有“这些”异常都应该落入同一个桶中。


当然,然后你可以做一些instanceofif/else 树,但是见鬼:java 这样做的方法是对每个树都有不同的 catch 语句。


但是,当然,根据上下文,做类似的事情可能是务实的


 catch(XException | YException | ZException  xyOrZ) {

   log(xyOrZ);

   handle(xyOrZ);

哪里handle()有一些instanceof“切换”。


长话短说:multi catch 是启用适用于所有异常的方面(例如日志记录)的便捷方法。但它可能会妨碍您处理特定于异常的处理。您只需平衡您的需求,并使用您的团队找到的最适合您需求的解决方案。在一定程度上,这是关于风格和样式的问题是由工作的代码库的人决定。


查看完整回答
反对 回复 2021-06-02
?
撒科打诨

TA贡献1934条经验 获得超2个赞

不,你不能那样做。这就是多个catch的用途

|表单允许您将不同的异常类型组合在一个 中catch,但具有用于异常的公共变量。其目的是允许统一处理不同的异常类型。但是当您想要对不同类型进行不同处理时,请使用多个catch块。


查看完整回答
反对 回复 2021-06-02
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

简而言之 - 没有。已引入针对异常的多捕获以连接具有相同逻辑(如日志记录)的多个捕获块。所以你想在这里做一个逆向工程。


如果您想以不同的方式处理每个异常,请使用旧表示法:


catch (IllegalArgumentException a) {

     // handle

} catch (IOException e) {

    // handle 

}

在 multicatch 块内执行此操作需要使用 instanceOf,这看起来很糟糕且可读性较差:


catch (IOException | IllegalArgumentException a) {

       if(a instanceof IOException) {

         ((IOException)a).doStuff();

       } else if(a instanceof IllegalArgumentException){

         ((IllegalArgumentException)a).doStuff();

       }


    }


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信