在检查布尔状态时是否有更简洁的方法来处理try / catch?

时间:2016-12-21 05:43:38

标签: java exception exception-handling

我想查询一些状态并在失败条件下突破我的方法,但这种情况也必须防止检查异常。

我目前正在处理它:

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上有效的其他状态没有意义。

2 个答案:

答案 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;
    }
}