在下面的方法中,我如何使用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的异常,
答案 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;
}