如何合并Java代码中两个返回null的else分支?
优化方案:合并返回null的分支
方案1:提前统一返回null,简化嵌套逻辑
先把所有需要返回null的情况前置处理,再进入正常创建对象的流程,这样代码嵌套更少,可读性更强:
public Task taskFromString(String taskString) { String[] splitTaskString = taskString.split(","); // 处理第一个返回null的场景:拆分后元素数量不足 if (splitTaskString.length <= 1) { return null; } TypeOfTask taskType; try { taskType = TypeOfTask.valueOf(splitTaskString[1]); } catch (IllegalArgumentException e) { // 类型不匹配时直接返回null return null; } // 仅处理合法的三种任务类型 if (taskType == TypeOfTask.SUBTASK) { // 注意:原代码未处理splitTaskString长度不足的情况,实际使用建议补充判断避免数组越界 return new Subtask(splitTaskString[2], splitTaskString[4], Status.valueOf(splitTaskString[3]), taskType, Integer.parseInt(splitTaskString[5])); } else if (taskType == TypeOfTask.TASK) { return new Task(splitTaskString[2], splitTaskString[4], Status.valueOf(splitTaskString[3]), taskType); } else if (taskType == TypeOfTask.EPIC) { return new Epic(splitTaskString[2], splitTaskString[4], Status.valueOf(splitTaskString[3]), taskType); } // 剩余未匹配的类型返回null return null; }
方案2:合并条件判断,减少分支嵌套
把两个返回null的条件合并到前置判断中,直接跳过后续逻辑:
public Task taskFromString(String taskString) { String[] splitTaskString = taskString.split(","); TypeOfTask taskType; // 合并返回null的两个条件:拆分长度不足 或 任务类型不合法 if (splitTaskString.length <= 1) { return null; } try { taskType = TypeOfTask.valueOf(splitTaskString[1]); } catch (IllegalArgumentException e) { return null; } if (taskType != TypeOfTask.SUBTASK && taskType != TypeOfTask.TASK && taskType != TypeOfTask.EPIC) { return null; } // 后续仅处理合法类型的对象创建 if (taskType == TypeOfTask.SUBTASK) { return new Subtask(splitTaskString[2], splitTaskString[4], Status.valueOf(splitTaskString[3]), taskType, Integer.parseInt(splitTaskString[5])); } else if (taskType == TypeOfTask.TASK) { return new Task(splitTaskString[2], splitTaskString[4], Status.valueOf(splitTaskString[3]), taskType); } else { // 此处必然是EPIC类型 return new Epic(splitTaskString[2], splitTaskString[4], Status.valueOf(splitTaskString[3]), taskType); } }
额外优化建议
- 提取重复的
TypeOfTask.valueOf调用,避免多次解析枚举,既提升性能又让代码更简洁。 - 原代码未处理
splitTaskString长度不足的场景(比如创建Subtask需要访问索引5,若拆分后元素不够会抛出数组越界异常),实际使用时建议补充长度检查。
内容的提问来源于stack exchange,提问作者Андрей Курочкин
相关产品推荐
相关产品推荐

