在catch块中引发异常是否没有用?

时间:2019-04-30 14:49:30

标签: java exception

我试图找出什么是处理Java中异常的最佳方法。 将RunTimeException扔到catch块中还是个好主意?

public final void clickOnElement(MobileElement mobileElement, int secondsToWait) {
    try {
        abstractPlatform.clickOnElement(mobileElement,secondsToWait);
    } catch (Exception e) {
        throw new NoSuchElementException("Wasn't able to click on element " + mobileElement);
    }
}

3 个答案:

答案 0 :(得分:3)

有时确实需要RuntimeException而不是检查的异常。

} catch (Exception e) {
    throw new NoSuchElementException("Wasn't able to click on element " + mobileElement, e);
}

我将指定确切的异常,例如IOException|SQLException,并将其添加为重新抛出的原因。

最近的用例是 lambdas ,它们位于不允许检查异常的上下文(流)中。

或者只是添加其他信息,这可能有助于查明错误,例如文件名或SQL语句和参数。

特别是IllegalArgumentException和IllegalStateException可以比其他异常提供更多信息。

答案 1 :(得分:1)

它是否有用,完全取决于我们的使用方式。我以某种方式使用它,以便可以维护异常日志。

public final void clickOnElement(MobileElement mobileElement, int secondsToWait) 
{
  try 
  {
    abstractPlatform.clickOnElement(mobileElement,secondsToWait);
  } 
  catch (Exception e) 
  {
    logError(this, "clickOnElement()", "Wasn't able to click on element"+mobileElement);
    throw new NoSuchElementException("Wasn't able to click on element " + mobileElement);
  }
}

现在,在这种情况下,我创建了一个记录该特定方法异常的方法,通过查看日志,我可能能够找出异常原因。但是让我们假设这段代码正在API中使用。

作为一名API设计人员,我想返回一些特定的状态代码,而不是显示雄猫/框架发送的异常消息。在那种情况下,我们可以将异常抛出,并且可以将异常保留在某个父方法中,或者由框架本身保留(如果有某种机制可以实现)。

所以这全取决于我们的使用方式。

答案 2 :(得分:0)

不是没有用,我经常在编写的代码中做这件事,我宁愿看到自己的自定义异常以及有关错误的消息,因为在大多数情况下,您要处理它的捕获位置,因此您会知道为什么已经抛出,所以我更希望看到带有有关确切问题的详细消息的异常,而不是抛出泛型异常,而只是在控制台中看到错误消息,无用的例子是

try {
    abstractPlatform.clickOnElement(mobileElement,secondsToWait);
} catch (Exception e) {
    throw e;
}