是否可以在不使用多个 catch 语句的情况下捕获多个异常并对它们执行不同的逻辑?
Is it possible to catch multiple exceptions and perform different logic upon them without using multiple catch statements?
至于对异常执行不同的逻辑。如下:
catch (IOException e | IllegalArgumentException a) {
e.doStuff();
a.doStuff();
}
不,你不能那样做。这就是多个 catch
块 用于 .
|
形式允许您将不同的异常类型组合在一个 catch
中,但异常具有一个公共变量。其目的是允许统一处理不同的异常类型。但是当你想要 disparate 处理不同的类型时,使用多个 catch
块。
这没有意义。当您使用 multi 捕获时,您是在隐含地说:所有 "these" 异常都应该落入同一个桶中。
当然,您随后可以做一些 instanceof
if/else 树,但是哎呀:java 这样做的方法是为每个树设置不同的 catch 语句。
但是,当然,根据上下文,做一些类似的事情可能是务实的
catch(XException | YException | ZException xyOrZ) {
log(xyOrZ);
handle(xyOrZ);
其中 handle()
做了一些 instanceof
"switching"。
长话短说:多捕获是启用适用于所有异常的方面(例如日志记录)的便捷方式。但它可能会影响您处理异常的方式。您只需平衡您的需求,并使用 您的 团队发现最适合您需求的解决方案。在某种程度上,这是关于 style,而 style 问题由代码库的工作人员决定。
简而言之 - 没有。引入了针对异常的多捕获以连接具有相同逻辑(如日志记录)的多个捕获块。所以你想在这里做一个逆向工程。
如果您想以不同的方式处理每个异常,请使用旧的表示法:
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();
}
}
是的,可以在同一个catch块中捕获多个Exception,并根据捕获到的Exception执行不同的逻辑。
例如:
catch (IOException | IllegalArgumentException e) {
if(e instanceof IOException){
//execute logic for IOException
}
else if(e instanceof IllegalArgumentException ){
//execute logic for IllegalArgumentException
}
}
至于对异常执行不同的逻辑。如下:
catch (IOException e | IllegalArgumentException a) {
e.doStuff();
a.doStuff();
}
不,你不能那样做。这就是多个 catch
块 用于 .
|
形式允许您将不同的异常类型组合在一个 catch
中,但异常具有一个公共变量。其目的是允许统一处理不同的异常类型。但是当你想要 disparate 处理不同的类型时,使用多个 catch
块。
这没有意义。当您使用 multi 捕获时,您是在隐含地说:所有 "these" 异常都应该落入同一个桶中。
当然,您随后可以做一些 instanceof
if/else 树,但是哎呀:java 这样做的方法是为每个树设置不同的 catch 语句。
但是,当然,根据上下文,做一些类似的事情可能是务实的
catch(XException | YException | ZException xyOrZ) {
log(xyOrZ);
handle(xyOrZ);
其中 handle()
做了一些 instanceof
"switching"。
长话短说:多捕获是启用适用于所有异常的方面(例如日志记录)的便捷方式。但它可能会影响您处理异常的方式。您只需平衡您的需求,并使用 您的 团队发现最适合您需求的解决方案。在某种程度上,这是关于 style,而 style 问题由代码库的工作人员决定。
简而言之 - 没有。引入了针对异常的多捕获以连接具有相同逻辑(如日志记录)的多个捕获块。所以你想在这里做一个逆向工程。
如果您想以不同的方式处理每个异常,请使用旧的表示法:
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();
}
}
是的,可以在同一个catch块中捕获多个Exception,并根据捕获到的Exception执行不同的逻辑。
例如:
catch (IOException | IllegalArgumentException e) {
if(e instanceof IOException){
//execute logic for IOException
}
else if(e instanceof IllegalArgumentException ){
//execute logic for IllegalArgumentException
}
}