Java递归方法中count++触发ParameterAssignmentCheck错误,如何解决?
问题解决:ParameterAssignmentCheck错误修复及递归逻辑优化
错误原因
你遇到的ParameterAssignmentCheck错误,是因为静态代码检查规则禁止直接修改方法参数——修改参数会降低代码可读性,而且在Java值传递机制下,原代码的递归逻辑本身就存在问题:你修改的count是当前方法栈的副本,递归调用里的修改不会影响外层的count,最终返回的结果会不符合预期。
修复方案
不要直接修改方法参数,改用局部变量维护当前深度,同时接收递归调用的返回值(原代码忽略了递归返回结果,导致无法正确计算最大深度)。
修正后的代码
private int getChildChildDepth(List<ProjectTask> childProjectTasks, int count) { int currentCount = count; // 用局部变量替代参数修改 for (ProjectTask projectTask : childProjectTasks) { if (!projectTask.getChildTasks().isEmpty()) { // 递归调用时传递递增后的数值,并取返回的最大深度更新currentCount int childDepth = getChildChildDepth(projectTask.getChildTasks(), count + 1); currentCount = Math.max(currentCount, childDepth); } } return currentCount; }
关键改动说明
- 用局部变量
currentCount替代对参数count的直接修改,规避代码检查规则 - 递归调用时传递
count + 1(而非先自增再传递),避免参数污染 - 接收递归返回的子任务深度,取最大值更新当前深度,确保计算的是整个任务树的最大层级(原代码逻辑会只保留最后一个子任务的深度,结果不准确)
额外优化
如果你的需求是计算任务树的最大深度,可以对外暴露一个无参重载方法,简化初始调用:
public int getMaxTaskDepth(List<ProjectTask> rootTasks) { return getChildChildDepth(rootTasks, 0); } // 私有递归方法保持不变 private int getChildChildDepth(List<ProjectTask> childProjectTasks, int count) { int currentCount = count; for (ProjectTask projectTask : childProjectTasks) { if (!projectTask.getChildTasks().isEmpty()) { int childDepth = getChildChildDepth(projectTask.getChildTasks(), count + 1); currentCount = Math.max(currentCount, childDepth); } } return currentCount; }
内容的提问来源于stack exchange,提问作者Bhaskar
相关产品推荐
相关产品推荐

