java - How to improve ugly catch block using exception instanceof -


please pay attention: caller throws parentexception only!!

say aexception, , bexception inherit parentexception.

in method af, throws aexception, bexception , parentexception.

void af() throws aexception, bexception, parentexception {} 

the method caller calls af , throw parentexception only.

void caller() throws parentexception 

here lost information of subclasses of parentexception.

the method rootcaller calls method caller , rootcaller can catch parentexception thrown caller , using following exception process catch block:

void rootcaller() {     try {         caller();      } catch(parentexception e) {     if(e instanceof aexception) {         ......     } else   if(e instanceof bexception) {         ......     } else   if(e instanceof parentexception) {         ......     } else {     ......     } } 

this ugly , easy forget subclass of parentexception if subclasses many.

is there anyway improve such code?

current answer can not give me idea:

1, rootcaller cannnot use multi-catch simplify process cause caller throw parentexception.

2, because caller throw parentexception, there not other exception check if af changed latter throws more aexception , bexception, cexception.

as others have suggested in comments, should using multiple catch clauses.

void rootcaller() {     try {         caller();     } catch (aexception e) {         // ...     } catch (parentexception e) {         // ...     } catch (bexception e) {         // ...     } catch (anotherexception e) {         // ...     } catch (exception e) {         // ...     } } 

the order of catches matters too. exception tested against each case in turn , trigger first 1 matches.

so example aexception , bexception extending parentexception in above code catch (bexception e) block can never reached catch (parentexception e) reached , executed first.


Comments

Popular posts from this blog

php - render data via PDO::FETCH_FUNC vs loop -

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

The canvas has been tainted by cross-origin data in chrome only -