对异常执行不同的逻辑。如下:
GetY()
答案 0 :(得分:5)
不,您不能那样做。这就是的多个catch
块的用途。
通过|
格式,您可以将不同的异常类型组合到一个catch
中,但是具有一个用于异常的公共变量。其目的是允许统一处理不同的异常类型。但是,当您希望对不同类型进行不同处理时,请使用多个catch
块。
答案 1 :(得分:4)
那没有道理。当使用 multi 捕获时,您隐式地说:所有“这些”异常都应归入同一存储桶。
当然,您可以然后再创建一些instanceof
if / else树,但是很麻烦:java的实现方法是每个树都有不同的catch语句。
但是,当然,根据具体情况,做类似的事情可能很实用
catch(XException | YException | ZException xyOrZ) {
log(xyOrZ);
handle(xyOrZ);
其中handle()
进行了instanceof
的“切换”。
长话短说:多重捕获是启用对所有异常都有效的方面(例如日志记录)的便捷方法。但是它可以进入有关异常特定处理的方式。您只需平衡您的需求,并使用您的团队发现的最适合您需求的解决方案。在某种程度上,这是关于 style 的,而 style 问题是由代码库的工作人员决定的。
答案 2 :(得分:3)
简而言之-不。引入了用于异常的多重捕获,以具有相同逻辑(如日志记录)的方式连接多个捕获块。所以您想在这里进行逆向工程。
如果您想以不同的方式处理每个异常,请使用旧的符号:
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();
}
}
答案 3 :(得分:0)
是的,可以在同一个catch块中捕获多个Exception,并根据捕获的Exception执行不同的逻辑。
例如:
catch (IOException | IllegalArgumentException e) {
if(e instanceof IOException){
//execute logic for IOException
}
else if(e instanceof IllegalArgumentException ){
//execute logic for IllegalArgumentException
}
}