#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