所以我使用的是HtmlUnit,方法的签名如下:
public HtmlAnchor getAnchorByText(String text)
throws ElementNotFoundException
所以这意味着,对this方法的调用不仅会返回null,而且会抛出异常。
(我发现这很痛苦!!,在c#方法中,如果没有找到通常只返回null,除非我遗漏了什么,否则更容易?)
所以如果我不希望我的应用程序崩溃,我必须将此调用包装在异常中吗?
我如何用Java做到这一点?
答案 0 :(得分:6)
请记住,ElementNotFoundException
不是一个已检查的异常,因此您可以忽略它。但是如果不存在的元素是一个有效的情况,你不想抛出异常那么是的,你必须将代码包装在try-catch块中并处理它。
我也发现这种流量控制的例外情况很痛苦。你想要的基本结构是:
HtmlAnchor anchor = null;
try {
htmlAnchor = getAnchorByText(text);
} catch (ElementNotFoundException) {
// do nothing
}
如果你发现你自己编写了这个序列,那么用辅助方法包装它:
public static HtmlAnchor myFindAnchor(String text) {
try {
return getAnchorByText(text);
} catch (ElementNotFoundException) {
return null;
}
}
并调用它而不是使用虚假的try-catch块乱丢你的代码。
答案 1 :(得分:1)
- 编辑:
见克莱图斯的回答;由于OP的描述,我认为这是一个经过检查的例外。
- 老回答:
你只需在它周围放一个try / catch(或者从你的方法中重新抛出它)。
它们在Java中称为“已检查”异常,通常被认为是错误:)(但这不值得在这里讨论)。
try {
getAnchorByText(,,,)
} catch (ElementNotFoundException enfe) {
///
}
或投掷:
public void myFoo (...) throws ElementNotFoundException
我们的想法是,您不应该将异常传递到无法处理它们的地方(或者至少将它包装在可以处理的东西中)。您尝试将异常限制在应用中不同的“级别”。