我想查询一些状态并在失败条件下突破我的方法,但这种情况也必须防止检查异常。
我目前正在处理它:
try {
if (!isSomeState()) {
error("Failed to realize state");
return;
}
}
catch (SomeStateException ex) {
error("Failed to realize state");
return;
}
我可以抛出已检查的异常以下拉到catch块。但这感觉很脏,因为例外只是重定向程序流程:
try {
if (!isSomeState())
throw new SomeStateException();
}
catch (SomeStateException ex) {
error("Failed to realize state");
return;
}
让方法抛出此异常是没有意义的,因为我打算按照描述的方法处理它。
更新
为了澄清,被查询的状态使用套接字i / o,因此抛出IOException
的扩展名;所以在这种情况下,例外本身并不是多余的。
结果布尔值表示某个状态是设置为true
还是false
。在此异常上返回false
没有意义,因为继续查询可能在false
上有效的其他状态没有意义。
答案 0 :(得分:1)
您可以修改isSomeState
,以便在抛出异常时返回false
。那么你需要做的只是:
if (!isSomeState()) {
return;
}
答案 1 :(得分:0)
你可以使用以下逻辑,它更具可读性:
boolean flag = false;
try
{
flag = isSomeState();
}
catch(SomeStateException e)
{
// log here too.
flag = false;
}
finally
{
if(!flag)
{
error("Failed to realize state");
return;
}
}