如何更简洁地实现服务方法中的用户输入校验?
优化Java服务方法代码的几种方案
你的代码逻辑清晰但存在重复校验和嵌套层级的问题,以下是几种更简洁且易维护的优化方案:
1. 提取通用校验方法,消除重复代码
原代码中多次重复if (xxx == null) throw new CustomHandledException("example");的逻辑,把这部分抽成通用方法,既能精简代码,也方便后续统一修改校验规则:
// 可以放在当前类的私有方法,或者单独的工具类中 private void checkNotNull(Object obj) { if (obj == null) { throw new CustomHandledException("example"); } } public void exampleMethod(final UserDto user, String sthElse) { checkNotNull(user.getId()); checkNotNull(sthElse); GetUserResponseDto getUserResponse = client.getUserById(user.getId(), country); if (getUserResponse == null) { checkNotNull(user.getGivenName()); checkNotNull(user.getEmail()); CreateUserRequestDto createUserBody = UserMapper.toCreateBody(user); client.createUser(createUserBody); return; } if (!user.getLocale().equals(getUserResponse.getUser().getProfile().getLocale())) { client.updateUser(user); } }
2. 扁平化嵌套逻辑,减少缩进层级
把嵌套的if提前校验抛出,同时调整后续的分支结构,让代码执行路径更线性,避免过多的提前return:
private void checkNotNull(Object obj) { if (obj == null) { throw new CustomHandledException("example"); } } public void exampleMethod(final UserDto user, String sthElse) { checkNotNull(user.getId()); checkNotNull(sthElse); GetUserResponseDto getUserResponse = client.getUserById(user.getId(), country); if (getUserResponse == null) { checkNotNull(user.getGivenName()); checkNotNull(user.getEmail()); CreateUserRequestDto createUserBody = UserMapper.toCreateBody(user); client.createUser(createUserBody); } else { if (!user.getLocale().equals(getUserResponse.getUser().getProfile().getLocale())) { client.updateUser(user); } } }
3. 使用Optional处理空值,优化null判断
利用Java 8+的Optional类,更优雅地处理空值场景,避免显式的== null判断:
private void checkNotNull(Object obj) { if (obj == null) { throw new CustomHandledException("example"); } } public void exampleMethod(final UserDto user, String sthElse) { checkNotNull(user.getId()); checkNotNull(sthElse); Optional<GetUserResponseDto> userResponseOpt = Optional.ofNullable(client.getUserById(user.getId(), country)); userResponseOpt.ifPresentOrElse( response -> { if (!user.getLocale().equals(response.getUser().getProfile().getLocale())) { client.updateUser(user); } }, () -> { checkNotNull(user.getGivenName()); checkNotNull(user.getEmail()); CreateUserRequestDto createUserBody = UserMapper.toCreateBody(user); client.createUser(createUserBody); } ); }
可选优化:精准异常提示
如果需要区分不同校验场景的错误信息,可以给校验方法增加参数,让异常提示更清晰:
private void checkNotNull(Object obj, String errorMsg) { if (obj == null) { throw new CustomHandledException(errorMsg); } } // 调用示例 checkNotNull(user.getId(), "用户ID不能为空"); checkNotNull(sthElse, "额外参数不能为空"); checkNotNull(user.getGivenName(), "用户姓名不能为空"); checkNotNull(user.getEmail(), "用户邮箱不能为空");
内容的提问来源于stack exchange,提问作者Kaue
相关产品推荐
相关产品推荐

