2016-10-08 5 views
1

私のプロジェクトには2つのレイヤーがあります。A & B.レイヤーAの関数は例外のセットAe1、Ae2、Ae3を投げます。レイヤB関数は、例外Be1、Be2、Be3、Be4をスローします。レイヤBの関数は、レイヤAの異なる関数から呼び出されます。Javaのコードレイヤーでの例外処理

レイヤAの関数は、複数の例外をスローする可能性があります。

また、レイヤB関数の例外Be1とBe2を取得すると、例外をキャッチしてレイヤ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の7のでJavaバージョン6

答えて

1

:一般的な例外がcatchブロックで発生したとき

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

は、このようにあなたが繰り返しを避けます。 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); 

} 
+0

プロジェクトのJavaバージョンが7未満です – Vishnu