Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理回调内部异常的正确方法是什么?_Java_Exception_Exception Handling_Callback - Fatal编程技术网

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

Java 处理回调内部异常的正确方法是什么?,java,exception,exception-handling,callback,Java,Exception,Exception Handling,Callback,我得到了一个带有异常实例的回调。目前我是这样处理的,但我认为还有更好的方法。希望听到Java专家的一些评论。=) 我不能100%确定“在回调中处理异常”是什么意思,但您提供的onError方法可以更好地表达为: ... onError(Exception e) { try { throw e; } catch (IOException ioe) { // do smth with ioe } catch (MyException mye) {

我得到了一个带有异常实例的回调。目前我是这样处理的,但我认为还有更好的方法。希望听到Java专家的一些评论。=)


我不能100%确定“在回调中处理异常”是什么意思,但您提供的
onError
方法可以更好地表达为:

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

好的,您可以对多个catch块使用try,每个catch块处理的异常比他后面的更窄,这样您就不再需要ifs中的锅炉板代码:

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

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

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

+1那太好了。请注意,重新抛出异常是一种廉价且安全的操作。特别是,它不会创建新的stacktrace,也不会以任何方式更改exception对象。重播不会导致性能下降吗?我不知道。为什么不先用instsnceof解决方案运行程序,然后用rethrow解决方案运行程序,看看执行时间相差了多少:-)谢谢Andrei,我收到异常作为参数。
interface MyExceptionHandler  
{
    onError(Exception e) {
          // Default exception
    }
    onError(IOException ioe) {
          // do smth with ioe
    }
    onError(MyException mye) {
          // do smth with mye
    }
}