62

例外が発生した場合に実行したいコードがいくつかあります。ただし、そのコードは例外を生成することもあります。しかし、私は人々が別のトライ/キャッチの中でトライ/キャッチをするのを見たことがありません。

私が悪い練習をしていることであり、おそらくこれを行うためのより良い方法があります:

 Uri uri = Uri.parse("some url");
 Intent intent = new Intent(Intent.ACTION_VIEW, uri);

 try 
 {
     startActivity(intent);
 } 
 catch (ActivityNotFoundException anfe) 
 {
     // Make some alert to me

     // Now try to redirect them to the web version:
     Uri weburi = Uri.parse("some url");
     try
     {
         Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
         startActivity(webintent);
     }
     catch ( Exception e )
     {
         // Make some alert to me                        
     }
 }

ちょっとぎこちないようです。何か問題があるのでしょうか?

4

4 に答える 4

48

例外処理ロジックがそれほど複雑な場合は問題ありませんが、それを独自の関数に分割することを検討してください。

于 2012-05-20T14:57:10.093 に答える
11

特に、非常に多くのレベルのネストを含むコードを作成することは悪い習慣try-catchです。一方、catchブロックから例外をスローすることは許されない罪なので、非常に注意する必要があります。

私のアドバイス-catchロジックをメソッドに抽出し(catchブロックが単純になるように)、このメソッドが何もスローしないようにします。

Uri uri = Uri.parse("some url");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);

try 
{
    startActivity(intent);
} 
catch (ActivityNotFoundException anfe) 
{
    // Make some alert to me

    // Now try to redirect them to the web version:
    Uri weburi = Uri.parse("some url");
    Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
    silentStartActivity(webintent)
} 

//...

private void silentStartActivity(Intent intent) {
    try
    {
       startActivity(webintent);
    }
    catch ( Exception e )
    {
        // Make some alert to me                     
    }
}

また、プログラムの流れを制御するために例外を使用しているようです(私は間違っているかもしれません)。ActivityNotFoundExceptionスローが例外的な状況ではないが、通常の状況で発生する可能性がある場合は、標準の戻り値を検討してください。

于 2012-05-20T14:58:47.907 に答える
5

答えはいいえです。100%問題ありません。JDBCとIOでは、処理する例外がたくさんあるため、これらの多くを使用する必要があるかもしれません。

于 2012-05-20T15:04:06.697 に答える
0

ネストされたtryandcatchを使用したくない場合の代替ソリューションは、次のとおりです。次のようにすることもできます。

 boolean flag = false;
 void test();
 if(flag)
  {
   test2();
  }

テスト方法はここにあります:

private void test(){
   try {
        Uri uri = Uri.parse("some url");
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
   }catch (ActivityNotFoundException anfe){
        System.out.println(anfe);
        flag =true;
     }
 }

次に、残りのコードを2番目のメソッドに配置します。

public void test2(){
  Uri weburi = Uri.parse("some url");
        try
        {
           Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
           startActivity(webintent);
        }
        catch ( Exception e )
        {
            // Make some alert to me                     
        }
于 2017-11-05T06:06:48.227 に答える