Java:用Lambda表达式简化代码一例
Posted Billy编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:用Lambda表达式简化代码一例相关的知识,希望对你有一定的参考价值。
之前,调用第3方服务,每个方法都差不多“长”这样, 写起来啰嗦, 改起来麻烦, 还容易改漏。
public void authorizeRoleToUser(Long userId, List<Long> roleIds) { try { power.authorizeRoleToUser(userId, roleIds); } catch (MotanCustomException ex) { if (ex.getCode().equals(MSUserException.notLogin().getCode())) throw UserException.notLogin(); if (ex.getCode().equals(MSPowerException.haveNoPower().getCode())) throw PowerException.haveNoPower(); throw ex; } catch (MotanServiceException ex) { CatHelper.logEventService("Power-authorizeRoleToUser", "authorizeRoleToUser", ex.getStatus(), ex.getErrorCode(), ex.getMessage()); throw ex; } catch (MotanAbstractException ex) { CatHelper.logEventService("Power-authorizeRoleToUser", "authorizeRoleToUser", ex.getStatus(), ex.getErrorCode(), ex.getMessage()); throw ex; } catch (Exception ex) { CatHelper.logError(ex); throw ex; } }
我经过学习和提取封装, 将try ... catch ... catch .. 提取为公用, 得到这2个方法:
import java.util.function.Supplier; public static <T> T tryCatch(Supplier<T> supplier, String serviceName, String methodName) { try { return supplier.get(); } catch (MotanCustomException ex) { if (ex.getCode().equals(MSUserException.notLogin().getCode())) throw UserException.notLogin(); if (ex.getCode().equals(MSPowerException.haveNoPower().getCode())) throw PowerException.haveNoPower(); throw ex; } catch (MotanServiceException ex) { CatHelper.logEventService(serviceName + "-" + methodName, methodName, ex.getStatus(), ex.getErrorCode(), ex.getMessage()); throw ex; } catch (MotanAbstractException ex) { CatHelper.logEventService(serviceName + "-" + methodName, methodName, ex.getStatus(), ex.getErrorCode(), ex.getMessage()); throw ex; } catch (Exception ex) { CatHelper.logError(ex); throw ex; } } public static void tryCatch(Runnable runnable, String serviceName, String methodName) { tryCatch(() -> { runnable.run(); return null; }, serviceName, methodName); }
现在用起来是如此简洁。像这种无返回值的:
public void authorizeRoleToUser(Long userId, List<Long> roleIds) { tryCatch(() -> { power.authorizeRoleToUser(userId, roleIds); }, "Power", "authorizeRoleToUser"); }
还有这种有返回值的:
public List<RoleDTO> listRoleByUser(Long userId) { return tryCatch(() -> power.listRoleByUser(userId), "Power", "listRoleByUser"); }
这是我的第一篇Java文章。学习Java的过程中,既有惊喜,也有失望。以后会继续来分享心得。
以上是关于Java:用Lambda表达式简化代码一例的主要内容,如果未能解决你的问题,请参考以下文章