+--------+ +-----+
| a.b.EA |<----|s.EC |
+--------+ +-----+
^ ^
| |
+------+ +------+
|x.y.EC| |r.l.EC|
+------+ +------+
pacakge r.l;
public interface X{
void f() throws a.b.EA;
}
pacakge r.l;
public class M implements X{
public void f() throws a.b.EA {
throw new r.l.EC();
}
}
package x.y;
import r.l.M;
public static void main(String[] args){
try {
new M().f();
}catch(EC e){ (**)
}
}
问题是:如何捕获EC
的完全实例(因为EC
说的有关原因的问题 - EC
就像Invalid URL
)。
M.f()
抛出r.l.EC()
,我可以抓住r.l.EC
。但是,其他实现X
可以抛出,例如s.EC
,等等。所以,我无法做好准备。在那种情况下该怎么办
答案 0 :(得分:1)
由于您无法事先知道接口的其他实现可能引发的确切异常类型,您可以尝试捕获您的特定异常,然后是更常见的异常:
public static void main(String[] args){
try {
new M().f();
}
catch(EC e) {
// specific error handling
}
catch(EA e) {
// more general error handling
}
}