12

私はCプログラマーであり、Androidアプリケーションを1つ開発しているため、最近Javaを学んでいます。現在、私は状況にあります。以下はその1つです。

public Class ClassA{

public ClassA();

public void MyMethod(){

   try{
   //Some code here which can throw exceptions
   }
   catch(ExceptionType1 Excp1){
   //Here I want to show one alert Dialog box for the exception occured for the user.
   //but I am not able to show dialog in this context. So I want to propagate it
   //to the caller of this method.
   }
   catch(ExceptionType2 Excp2){
   //Here I want to show one alert Dialog box for the exception occured for the user.
   //but I am not able to show dialog in this context. So I want to propagate it
   //to the  caller of this method.
   }
   }
}

ここで、別のクラスの別の場所でメソッドMyMethod()の呼び出しを使用したいと思います。誰かがMyMethod()の呼び出し元に例外を伝播して、呼び出し元メソッドのダイアログボックスに例外を表示できるようにする方法のコードスニペットを提供してくれる場合。

申し訳ありませんが、この質問をする方法があまり明確で奇妙でない場合。

4

4 に答える 4

26

そもそも例外をキャッチしないで、メソッド宣言を変更して、それらを伝播できるようにします。

public void myMethod() throws ExceptionType1, ExceptionType2 {
    // Some code here which can throw exceptions
}

何らかのアクションを実行してから伝播する必要がある場合はそれを再スローできます。

public void myMethod() throws ExceptionType1, ExceptionType2 {
    try {
        // Some code here which can throw exceptions
    } catch (ExceptionType1 e) {
        log(e);
        throw e;
    }
}

ここでExceptionType2はまったく捕らえられていません-自動的に伝播するだけです。ExceptionType1キャッチされ、ログに記録されてから、再スローされます。

例外を再スローするだけのcatchブロックを用意するのは良い考えではありません。微妙な理由がない限り(たとえば、より一般的なcatchブロックがそれを処理できないようにするため)、通常は代わりにcatchブロックを削除する必要があります。

于 2012-02-29T12:33:57.707 に答える
2

それを捕まえて、もう一度投げないでください。これをして、好きな場所でキャッチしてください

public void myMethod() throws ExceptionType1, ExceptionType2 {
    // other code
}

public void someMethod() {
    try {
        myMethod();
    } catch (ExceptionType1 ex) {
        // show your dialog
    } catch (ExceptionType2 ex) {
        // show your dialog
    }
}
于 2012-02-29T12:35:38.390 に答える
0

例外を再スローするだけです

throw Excp1;

MyMthod()このように宣言に例外タイプを追加する必要があります

public void MyMethod() throws ExceptionType1, ExceptionType2  {

   try{
   //Some code here which can throw exceptions
   }
   catch(ExceptionType1 Excp1){
       throw Excp1;
   }
   catch(ExceptionType2 Excp2){
       throw Excp2;
   }
}

またはtry、例外を再スローする前に例外を処理するcatchステートメントに追加のコードを追加しない限り、例外を処理しなくなったため、単に省略します。

于 2012-02-29T12:31:47.073 に答える
0

私はいつもこのようにします:

public void MyMethod() throws Exception
{
    //code here
    if(something is wrong)
        throw new Exception("Something wrong");
}

次に、関数を呼び出すとき

try{
    MyMethod();
   }catch(Exception e){
    System.out.println(e.getMessage());
}
于 2013-05-12T10:50:11.137 に答える