java中代码层中的异常处理

时间:2016-10-08 13:17:12

标签: java exception-handling

我的项目中有两层说A& B. A层功能抛出一组例外Ae1,Ae2,Ae3。 B层函数抛出异常Be1,Be2,Be3,Be4。从A层的不同功能调用B层功能。

A层中的函数可以抛出多个异常。同样在B层。

另外,我有一个映射,就像每次从B层函数中获得异常Be1和Be2时,我捕获使用try catch在A层函数定义中的那些异常并将其作为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;
    }   
}

所以,我想通过使用函数或任何其他不同的方法避免这么多试试catch块,并且在A层中具有简单的功能

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

是否可以编写这样的通用函数?

注意:Java版本6。

1 个答案:

答案 0 :(得分: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); 

}