вторник, 17 сентября 2013 г.

Что лучше, простыня из catch{} или один раз Throwable?

Захотелось поразмыслить по-поводу как лучше. В институтах нам говорят - делайте так:
try{

}catch(NullPointerException){
}catch(JSONParserException){
}catch
.
.
.}finally{
}

один хороший программист мне подсказал, что лучше использовать такую вот метафору:
try{
.
}catch(Throwable th){
     if(th instanceof NullPointerException){
     }
      if(th instanceof ClassCastException){
     }
}

Хорошенько подумав, пришел к выводу, что в принципе в данном подходе, с точки зрения отказоустойчивости все отдлично - по сути можно обработать необходимые ошибки и если возникнет необработанная - приложение продолжит работу. Но, как мне кажеться - тут и кроеться основная проблема данного подхода - можно просто пропустить какое-либо уведомление об ошибке, даже выводя всегда в лог сообщение - лог загружен и ошибка может остаться незамеченной, причинив в итоге уйму проблем, например с вычислениями или нулевыми значениями. 
С другой стороны - данный подход удобен с точки зрения тестирования. При возникновении ошибки на процессе тестирования - мы можем выводить сообщение, содержащее краткое сообщение об ошибке, и благодаря ему уже сможем смотреть в лог. Удобен такой подход с точки зрения пользователя и уменьшения негативных отзывов в маркете, как по мне. Было бы интересно узнать еще чьё-то мнение
     

2 комментария:

  1. пацаны читайте Effective Java)))
    Обработка любой ситуации должна принадлежать тому же обработчику который генерит исключение. Леха, круто, но ты пересказал полностью мысли Блоха.

    ОтветитьУдалить
  2. Не дошел еще до исключительных ситуаций у Блоха. Спасибо за коммент, Дема!

    ОтветитьУдалить