这种异常处理方法有什么问题吗?

时间:2013-12-04 02:34:58

标签: java exception

我们需要有两个功能。他们做同样的事情,但一个处理异常,一个抛出异常。注意:如果要处理异常,则必须在下面的commonFunc()中处理异常。在functionHandlesEx()中处理异常是行不通的,因为要处理函数需要只在commonFunc()中可用的变量。为了重用代码,我们得到了以下内容。你看到它的任何问题(我可以看到一个问题是:函数抛出异常,但实际上当isExceptionHandled为真时抛出没有异常----但Java允许这样做)?有更好的方法吗?我们在Java 6.谢谢。

public void functionThrowsEx() throws Exception e
{
  commonFunc(false);  //false means does not handle exception
}

public void functionHandlesEx()
{
  try
  {
    commonFunc(true); //true means handle exception
  }
  catch (Exception e)
  {
    // do nothing as exception handled
  }
}

private void commonFunc(final boolean isExceptionHandled) throws Exception
{
  try
  {
    ....
  }
  catch (Exception e)
  {
    if (isExceptionHandled)
    {
       //handle the exception
    }
    else
    {
       throw e;
    }
  }
}

2 个答案:

答案 0 :(得分:0)

这似乎是处理异常的过于复杂的方法。我理解它的玩具代码来显示你在做什么,但我没有遇到很多理由来创建嵌套调用以处理异常。

理想情况下,可以导致异常的代码应该具有处理异常的方法,使用try ... catch,也许最后。这个逻辑流程似乎在非平凡的应用程序中非常复杂,并且会导致复杂性增加和调试困难。

答案 1 :(得分:0)

你应该摆脱这两个函数,并避免嵌套try / catch块。如果必须嵌套它们,请通过将逻辑保持在相同的方法中使其尽可能地具有straigtfoward。

从代码中,我猜你想根据程序的状态不同地处理异常。这段代码太复杂了,对于一个非常重要的应用程序来说很难理解。更好的方法是保留functionHandlesEx并将异常恢复逻辑放在处理函数中。

public void functionHandlesEx() {
try {
   //logic here;
  }
 }
catch (Exception e) {
 if(iWantToHandleException) {
    //handle exception    
   }
  //do nothing otherwise. Use the finally block for anything else they have in common.
  }
}

这个更容易理解,将它重构为这种形式应该不会太难。