在回调内处理异常的正确方法是什么?

时间:2011-11-17 12:01:18

标签: java exception exception-handling callback

我有一个带有异常实例的回调。目前我用这种方式处理它,但我认为有更好的方法。想听听Java专家的一些评论。 =)

...
onError(Exception e) {
   if (e instanceof IOException) {
      ioe = (IOException)e;
      // do smth with ioe
   } else if (e instanceof MyException) {
      mye = (MyException)e;
      // do smth with mye
   }
}
...

3 个答案:

答案 0 :(得分:8)

我不是100%肯定“处理回调中的异常”是什么意思,但你提供的onError方法可以更好地表达如下:

...
onError(Exception e) {
   try {
       throw e;
   } catch (IOException ioe) {
      // do smth with ioe
   } catch (MyException mye) {
      // do smth with mye
   }
}
...

答案 1 :(得分:2)

我认为您可以使用异常的子类覆盖“onError”:

interface MyExceptionHandler  
{
    onError(Exception e) {
          // Default exception
    }
    onError(IOException ioe) {
          // do smth with ioe
    }
    onError(MyException mye) {
          // do smth with mye
    }
}

答案 2 :(得分:1)

好吧,你可以使用一个带有多个catch块的try,每个catch块处理一个比他后面更小的异常,这样你不再需要带有ifs的样板代码:

try {
   doSomething();    
} catch(IOException ioe) {
   log.error("File not found"+ioe.getmessage();
} catch(Exception e) {
   //... etc
}