Как правильно обрабатывать исключения внутри обратного вызова? - PullRequest
8 голосов
/ 17 ноября 2011

Я получил обратный вызов с экземпляром исключения. В настоящее время я справляюсь с этим, но думаю, что есть лучший способ. Хотелось бы услышать комментарий от эксперта по 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 ]

8 голосов
/ 17 ноября 2011

Я не уверен на 100% в том, что вы подразумеваете под «обработкой исключений внутри обратного вызова», но предоставленный вами метод onError может быть лучше выражен так:

...
onError(Exception e) {
   try {
       throw e;
   } catch (IOException ioe) {
      // do smth with ioe
   } catch (MyException mye) {
      // do smth with mye
   }
}
...
2 голосов
/ 31 августа 2015

Я думаю, вы могли бы переопределить "onError" с подклассами исключений:

interface MyExceptionHandler  
{
    onError(Exception e) {
          // Default exception
    }
    onError(IOException ioe) {
          // do smth with ioe
    }
    onError(MyException mye) {
          // do smth with mye
    }
}
1 голос
/ 17 ноября 2011

Ну, вы можете использовать попытку с несколькими блоками уловов, каждый из которых имеет более узкое исключение, чем тот, который следует за ним, так что вам больше не нужен код котельной плиты с ifs:

try {
   doSomething();    
} catch(IOException ioe) {
   log.error("File not found"+ioe.getmessage();
} catch(Exception e) {
   //... etc
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...