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

至于对异常执行不同的逻辑。如下:


catch (IOException e | IllegalArgumentException a) {


       e.doStuff();

       a.doStuff();

    }


jeck猫
浏览 173回答 3
3回答

慕虎7371278

那没有意义。当您使用multi catch 时,您就是在暗示:所有“这些”异常都应该落入同一个桶中。当然,然后你可以做一些instanceofif/else 树,但是见鬼:java 这样做的方法是对每个树都有不同的 catch 语句。但是,当然,根据上下文,做类似的事情可能是务实的 catch(XException | YException | ZException  xyOrZ) {   log(xyOrZ);   handle(xyOrZ);哪里handle()有一些instanceof“切换”。长话短说:multi catch 是启用适用于所有异常的方面(例如日志记录)的便捷方法。但它可能会妨碍您处理特定于异常的处理。您只需平衡您的需求,并使用您的团队找到的最适合您需求的解决方案。在一定程度上,这是关于风格和样式的问题是由工作的代码库的人决定。

撒科打诨

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

慕丝7291255

简而言之 - 没有。已引入针对异常的多捕获以连接具有相同逻辑(如日志记录)的多个捕获块。所以你想在这里做一个逆向工程。如果您想以不同的方式处理每个异常,请使用旧表示法: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();       }    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java