请注意:调用者只抛出父异常!!
这么说aexception
,并bexception
继承自parentexception
。
在方法中,af
它和。throws aexception
bexception
parentexception
void af() throws aexception, bexception, parentexception {}
该方法caller
调用af
且throw parentexception
仅。
void caller() throws parentexception
这里我们丢失了 parentexception 的子类信息。
该方法rootCaller
调用该方法caller
,并且rootcaller
只能catch parentexception
通过caller
和使用以下异常过程捕获块抛出:
void rootCaller() {
try {
caller();
} catch(parentexception e) {
if(e instanceof aexception) {
......
} else if(e instanceof bexception) {
......
} else if(e instanceof parentexception) {
......
} else {
......
}
}
如果子类太多,这很丑陋并且很容易忘记某些父异常的子类。
反正有没有改进这样的代码?
目前的答案不能给我任何想法:
1、rootCaller不能使用multi-catch来简化流程导致caller只抛出parentexception。
2、因为调用者只抛出parentexception,所以没有任何其他的异常检查,如果将af改成throw多于aexception和beexception,比如cexception。