public void getPartList(Long aa) { List<Long> list = pickingMapper.selectPartList(aa); if (list != null) { for (Long index : list) { getPartList(index); } } partList.add(aa); }让这个方法跳出死循环
时间: 2024-02-14 13:10:08 浏览: 56
这段代码中出现了递归调用的情况,可能会导致死循环。为了让这个方法跳出死循环,可以在递归调用前加上一些合适的判断条件,例如:
1. 在递归调用前判断当前的参数是否为空或是否已经被处理过,如果是,则不再进行递归调用,直接返回即可。
2. 设置一个递归深度的最大值,当递归深度达到最大值时,强制退出递归,避免死循环。
修改后的代码如下:
```
public void getPartList(Long aa, int depth) {
if (depth > MAX_DEPTH) {
return; // 递归深度达到最大值,直接返回
}
List<Long> list = pickingMapper.selectPartList(aa);
if (list != null) {
for (Long index : list) {
if (index != null && !partList.contains(index)) {
getPartList(index, depth + 1); // 递归调用,深度加1
}
}
}
if (!partList.contains(aa)) {
partList.add(aa);
}
}
```
其中,MAX_DEPTH为递归深度的最大值,partList为保存处理结果的列表。在递归调用前,判断index是否为空或已经被处理过,在递归调用时,将深度加1。在方法最后,如果当前参数aa未被处理过,则加入到partList中。这样,就可以避免死循环的情况。
阅读全文