【发布时间】:2018-05-15 12:58:58
【问题描述】:
我有两种方法
process (MyExceptionType1 e){
...
}
process (MyExceptionType2 e){
...
}
还有 try/catch :
try{
...
}catch (MyExceptionType1 | MyExceptionType2 e){
process(e);
}
编译器拒绝调用进程(e)并出现以下错误: 没有找到适合 processException(java.lang.Exception) 的方法
就好像它忽略了 catch 子句中给出的类型。
但它接受
}catch (MyExceptionType1 e){
process(e);
}catch(MyExceptionType2 e){
process(e);
}
如何解释这种行为?
感谢您的帮助。
纳德
【问题讨论】:
-
您的进程将异常作为输入?澄清一下怎么样?
-
您使用的是哪个 JAVA 版本? JAVA 7 之前的版本不支持多个 Catch 块。
-
您还显示了
processException和process- 第一种方法在哪里?投票结束时不清楚,除非你当然做得更好 -
您的
process方法都不接受两种 类型的异常,因此在编译期间这两种方法都不能用于解析process(e)调用。 -
当使用多捕获块时,捕获块中的异常类型始终是捕获的异常的常见类型。对于 Java 提供的基本异常,这通常是
RuntimeException或Exception。你会不会例如创建一个派生自RuntimeException的类MyException和派生自MyException的两个类MyException1和MyException2,并制作一个多捕获捕获MyException1和MyException2,捕获块中的异常类型将属于MyException。在您的情况下,这两个异常的基类是Exception。