3 回答
![?](http://img1.sycdn.imooc.com/54584eff000195a302200220-100-100.jpg)
TA贡献1802条经验 获得超4个赞
那没有意义。当您使用multi catch 时,您就是在暗示:所有“这些”异常都应该落入同一个桶中。
当然,然后你可以做一些instanceofif/else 树,但是见鬼:java 这样做的方法是对每个树都有不同的 catch 语句。
但是,当然,根据上下文,做类似的事情可能是务实的
catch(XException | YException | ZException xyOrZ) {
log(xyOrZ);
handle(xyOrZ);
哪里handle()有一些instanceof“切换”。
长话短说:multi catch 是启用适用于所有异常的方面(例如日志记录)的便捷方法。但它可能会妨碍您处理特定于异常的处理。您只需平衡您的需求,并使用您的团队找到的最适合您需求的解决方案。在一定程度上,这是关于风格和样式的问题是由工作的代码库的人决定。
![?](http://img1.sycdn.imooc.com/54584e2c00010a2c02200220-100-100.jpg)
TA贡献1934条经验 获得超2个赞
不,你不能那样做。这就是多个catch
块的用途。
该|
表单允许您将不同的异常类型组合在一个 中catch
,但具有用于异常的公共变量。其目的是允许统一处理不同的异常类型。但是当您想要对不同类型进行不同处理时,请使用多个catch
块。
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
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();
}
}
添加回答
举报