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

Java 在不使用多个catch语句的情况下,是否可以捕获多个异常并对其执行不同的逻辑?,java,exception,java-7,Java,Exception,Java 7,在异常情况下执行不同的逻辑。详情如下: catch (IOException e | IllegalArgumentException a) { e.doStuff(); a.doStuff(); } 不,你不能那样做。这就是多个捕捉块的用途 |表单允许您在单个catch中组合不同的异常类型,但使用一个用于异常的公共变量。其目的是允许统一处理不同的异常类型。但是当您想要对不同类型进行不同处理时,请使用多个catch块。这没有意义。当您使用multi-cat

在异常情况下执行不同的逻辑。详情如下:

catch (IOException e | IllegalArgumentException a) {

       e.doStuff();
       a.doStuff();
    }

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


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

这没有意义。当您使用multi-catch时,您会含蓄地说:所有这些异常都应该属于同一个bucket

当然,您可以对if/else树执行一些instanceof,但是heck:java的方法是为每个树使用不同的catch语句

但是,当然,也取决于上下文,这样做可能是务实的

 catch(XException | YException | ZException  xyOrZ) {
   log(xyOrZ);
   handle(xyOrZ);
其中handle执行一些切换实例


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

简言之-否。引入了多捕获异常,以使用相同的逻辑日志连接多个捕获块。所以你想在这里做一个逆向工程

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

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块中捕获多个异常,并根据捕获的异常执行不同的逻辑。 例如:

catch (IOException | IllegalArgumentException e) {
if(e instanceof IOException){
//execute logic for IOException
}
else if(e instanceof IllegalArgumentException ){
//execute logic for IllegalArgumentException 
}
}

第二个代码示例是什么语言?在Java中,它是小写O和IOException.doStuff的实例;我和我的合资公司都不知道。