简体   繁体   中英

How to avoid dummy return in try catch block while a method which throws exception is called?

I know it is required that in a non-void method, return or throw is a must. But I don't like the dummy return in catch block in such case:

public int call() throws Exception {
  try { 
    return calcMethod();
  } catch (Exception e) {
    process(e);
    return 0;
  }
}

protected void process(Exception e) throws xxxException {
  if ( isTypeAException(e) ) { throw new TypeAException() ; } 
  else if ( isTypeBException(e) ) { throw new TypeBException() ; } 
  else ( isTypeCException(e) ) { throw new TypeCException() ; } 
}

...

process will certainly throws an exception, then why return is still required in catch block?

In one sense, throwing the exception in process() is to be construed as "a problem with processing", which is also not what you mean.

As you want the exception to be raised by call() , so the solution here is to make process() an exception factory:

public int call() throws Exception {
    try {
        return calcMethod();
    } catch (Exception e) {
        throw process(e);
    }
}

protected xxxException process(Exception e) throws xxxException {
    if (isTypeAException(e))
        return new TypeAException();
    else if (isTypeBException(e))
        return new TypeBException();
    else
        return new TypeCException();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM