Обработка исключений в блоке исключений - PullRequest
1 голос
/ 28 сентября 2010

Может ли кто-нибудь предоставить какую-нибудь полезную практику для обработки исключений, например, у меня есть

 try { 
 ... 
 DeserializationResult deserialization = xmlSerializationService.deserializeFromXml(node);
 some code here
} catch (Exception e) { 

try {

//I need to create process result xml with error code and some details
// creation of result xml document 

} catch (Exception e) {

// maybe some error message here

  }

}   

Могу ли я как-нибудь сделать этот код более ясным, бесшумным и понятным?Спасибо за ответы.PS Я знаю, что использование общих исключений не является хорошей практикой, это просто для примера.

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Первое приближение для решения этой проблемы обычно состоит в том, чтобы поместить логику перехвата в отдельный метод и иметь только одну строку в блоке перехвата (вызов метода).

0 голосов
/ 28 сентября 2010

Всегда отлавливайте конкретные исключения, а не общий суперкласс Exception.

Если я посмотрю на этот код, я не уверен, что может пойти не так. Если вы специально перехватываете исключения, вам будет гораздо легче увидеть, какие сбои вы ожидаете и на что рассчитываете.

Также обрабатывайте каждый сбой особым образом, который имеет смысл для этого сбоя. Самая простая форма этого - вернуть результат, описывающий ошибку.

Может быть, что-то вроде:

try{
    //DeserializationResult deserialization = xmlSerializationService.deserializeFromXml(node);
    //some code here
}catch(NullPointerException npe){
    //Maybe return something like: new DeserializationResult("xmlSerializationService not initialized")
}catch(DeserializationException dse){
    //Maybe return something like: new DeserializationResult("Could not deserialize because ...")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...