我试图找出什么是处理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);
}
}
答案 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;
}