Java - 在尝试/捕获中做一个尝试/捕获是不好的做法吗?

我有一些代码,如果发生异常,我想执行。但该代码也可能生成异常。但我从未见过人们在另一个尝试/捕捉中做一个尝试/捕捉。

这是我正在做的糟糕的练习,也许有更好的方法来做到这一点:

 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                        
     }
 }

这似乎有点尴尬。它有什么问题吗?


答案 1

这很好,但是如果您的异常处理逻辑很复杂,您可以考虑将其分解为自己的函数。


答案 2

编写具有如此多级别嵌套的代码是一种不好的做法,尤其是在 - 所以我会说:避免。另一方面,从捕获块中抛出异常是不可原谅的罪过,所以你应该非常小心。try-catch

我的建议 - 将你的逻辑提取到一个方法中(所以块很简单),并确保这种方法永远不会抛出任何东西:catchcatch

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


推荐