Java中能否将Else和Catch合并,简化重复抛出异常的冗余代码?
Java重复抛出异常逻辑合并实现方案
方案1:调整try块结构,统一异常路径(最贴合你给出的伪代码需求)
把条件判断移入try块内部,不满足条件时主动触发异常,所有需要抛出目标异常的场景都会进入统一的catch块处理,完全消除重复代码:
try { // 条件不满足直接抛出异常触发后续统一处理 if (!condition) { throw new RuntimeException(); // 也可以自定义一个专用的标记异常类型避免误判 } // 此处放置原try块内的业务逻辑代码 } catch (Exception e) { // 所有异常路径统一抛出目标异常 throw new YourTargetException(); }
如果需要避免误捕获业务逻辑中不该被统一处理的异常,可以对catch的异常类型做限制:
// 自定义专用的条件不满足标记异常 class ConditionFailException extends RuntimeException {} try { if (!condition) { throw new ConditionFailException(); } // 业务逻辑 } catch (ConditionFailException | BusinessException e) { // 仅处理需要统一抛异常的类型 throw new YourTargetException(); }
方案2:封装公共异常抛出方法
如果不想调整现有代码的条件判断和try块结构,也可以把重复的抛出逻辑封装为独立方法,两处直接调用即可消除重复:
if (condition) { try { // 业务逻辑 } catch (Exception e) { throwCommonException(); } } else { throwCommonException(); } // 封装重复的异常抛出逻辑 private void throwCommonException() { throw new YourTargetException(); }
如果异常需要携带不同的上下文信息,给方法增加对应参数传递即可,扩展性更高。
内容的提问来源于stack exchange,提问作者NeatZ
相关产品推荐
相关产品推荐

