Обработка исключений в слоях кода в java

#java #exception-handling

#java #исключение

Вопрос:

У меня есть два уровня в моем проекте, скажем, A amp; B. Функции слоя A генерируют набор исключений Ae1, Ae2, Ae3. Функции уровня B генерируют исключения Be1, Be2, Be3, Be4. Функции уровня B вызываются из разных функций на уровне A.

Функция в слое A может выдавать более одного исключения. Аналогично на уровне B.

Кроме того, у меня есть сопоставление, например, всякий раз, когда я получаю исключения Be1 и Be2 из функций уровня B, я перехватываю эти исключения внутри определения функции уровня A с помощью try catch и выбрасываю его как Ae3. Аналогично, исключения Be3 генерируются как Ae2, а Be4 генерируются как Ae1.

 public void function1InLayerB throws Be1, Be2, Be4{
    ......
}
  

Теперь то, что я делаю, это :

 public void function1InLayerA throws Ae3, Ae1{
    try{
         function1InLayerB();
    } catch(Be1){
         throw new Ae3;
    } catch(Be2){
         throw new Ae3;
    } catch(Be4){
         throw new Ae1;
    }   
}
  

Итак, я хочу избежать такого большого количества блоков try catch, используя функцию или любой другой другой подход, и иметь функцию на уровне A просто как

 public void fnuction1InLayerA throws Ae1, A2{
   ....
   new_function(function1InLayerB());
}
  

Возможно ли написать общую функцию, подобную этой?

Примечание: Java версии 6.

Ответ №1:

Начиная с Java 7, вы можете сделать это:

     try{
         function1InLayerB();
    } catch(Be1 | Be2){
         throw new Ae3;
    } catch(Be4){
         throw new Ae1;
    }  
  

Таким образом, вы избегаете повторения, когда обычное исключение происходит в блоках catch.

Для Java 6 и менее:

 try{
    function1InLayerB();
}catch(Exception ex){
    manageExceptions(ex);
}
  

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

 private void manageExceptions(Exception ex){

    if(ex instanceOf Be1 || ex instanceOf Be2){
        throw new Ae3;
    }else if(ex instance of Be4){
        throw new Ae1;
    }...
    else
        throw new Exception(ex); 

}
  

Комментарии:

1. проект находится на версии Java менее 7