什么';s Java中异常变量的类型';什么是多重捕获?

什么';s Java中异常变量的类型';什么是多重捕获?,java,exception-handling,java-7,Java,Exception Handling,Java 7,可能重复: 对于Java新的多捕获构造中的异常变量,必须假设什么样的异常类型: try{ //-- do error prone stuff } catch (ExceptionTypeA | ExceptionTypeB e) { //-- e.methodA() or e.methodB() ? } 如果ExceptionTypeA和ExceptionTypeB是具有自定义实用程序方法的自定义异常,那么,编写代码时e是什么类型,可以调用什么方法e?e的类型将是Exceptio

可能重复:

对于Java新的多捕获构造中的异常变量,必须假设什么样的异常类型:

try{
   //-- do error prone stuff
}
catch (ExceptionTypeA | ExceptionTypeB e) {
   //-- e.methodA() or e.methodB() ?
}

如果
ExceptionTypeA
ExceptionTypeB
是具有自定义实用程序方法的自定义异常,那么,编写代码时
e
是什么类型,可以调用什么方法
e

e的类型将是ExceptionA和ExceptionB最接近的父类型。若它们只是扩展异常,那个么类型将是异常


如果针对不同的异常情况调用不同的方法,如
methodA If ExceptionA
methodB for ExceptionB
,则不应使用多重捕获。如果ExceptionA和ExceptionB都扩展了一个公共超类型并重写了它的一个方法,那么您可以使用它。

一次您只捕获一个异常,因此e.printStackTrace();我猜是最低的公共祖先还是基类(exception/throwable)。我现在没有权限访问编译器,但应该可以检查。它更像是从低到高的层次结构(如果我没有错的话)。