例外が発生した場合に実行するコードがいくつかあります。しかし、そのコードは例外を生成することもあります。しかし、他のtry/catchの中でtry/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");
try
{
Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
startActivity(webintent);
}
catch ( Exception e )
{
// Make some alert to me
}
}
ちょっとぎこちないようです。それと間違っているかもしれない何かがありますか?
例外処理ロジックが非常に複雑な場合は、それを独自の関数に分割することを検討することもできますが、問題ありません。
特に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
のスローが例外の状況ではないが、通常の状況下で発生する可能性がある場合は、標準の戻り値を考慮してください。
答えはノーです。100%すばらしいです。JDBCとIOでこれらの多くを使用する必要があるかもしれません。
ネストされたtry and catchを使用したくない場合の代替ソリューションは次のとおりです。次のようにすることもできます。
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
}