如何避免异常(尝试catch块)作为流控制

时间:2014-06-12 09:07:11

标签: java exception try-catch

在下面的方法中,我如何使用try catch块进行aovid但是仍然在id上调用正确的方法来获取User / group? (最佳实践)提前致谢

     public Principal getPrincipal(String id) {
     Principal principal;
       try {
         principal = getUserById(id);
          return principal;

       } catch (Exception exception) {
        // nothing to do, maybe id is for group
    }

    principal = getGroup(id);
    return principal;
} 

getUSerById(),抛出一个名为EntityNotException的异常,

3 个答案:

答案 0 :(得分:0)

使函数getUserById如此方式,如果没有找到用户,则返回null

public Principal getPrincipal(String id) {

Principal principal = getUserById(id);

if (principal == null) {
          principal = getGroup(id);
    }
  return principal;

}

答案 1 :(得分:0)

在这种情况下,如果找不到用户,我会考虑让getUserById(String id)返回null,而不是EntityNotException - 例外情况将用于特殊的情况,例如您无法控制的故障(网络连接消失,没有更多可用内存等)。您的代码可能如下所示:

public Principal getPrincipal(String id) {
    Principal principal = getUserById(id);

    if (principal == null) {
        //Try by group ID instead
        principal = getGroup(id);
    }
    return principal;
}

确保您确定了某些方法的返回类型 - 从它们的名称来看,它听起来不像getUserById(String id)getGroup(String id)肯定会返回Principal个对象 - 第一个听起来像它可以返回任何类型的User而第二个听起来Group,无论是什么。

或者,如果此方法的调用者可能知道他们是userId还是groupId,您是否考虑过单独的方法getPrincipalByUserId(String userId)getPrincipalByGroupId(String groupId)

答案 2 :(得分:0)

如果无法修改getUserById(String)方法,则无法避免try / catch块。这样检查没问题,但是当你忽略异常时要非常小心。

你也可以像这样提取一个小的 get方法

public Principal getUserByIdIngorinException(String id) {
    try {
        return getUserById(id);
    } catch (Exception ignored) {
        // ignore the exception
    }
    return null;
}