我想记下我的xhtml页面上的所有元素。我期望每个下一个元素都以更大的顺序放入HashMap。如何处理递归方法参数的变量?
私人无效addComponents(HashMap的相关信息, 列表组件,整秩序,FacesContext的上下文){
System.out.println("Start: "+order); if ((components == null) || components.isEmpty()) { System.out.println("return: "+order); return; } order = order + 1000; for (UIComponent c : components) { System.out.println("HashMap: "+order); infos.put(c.getClientId(context), order); addComponents(infos, c.getChildren(), order, context); System.out.println("Out: "+order); order = order + 1000; } System.out.println("End: "+order); return;
}
我为输出和错误记数
HashMap: 1000
Start: 1000
return: 1000
Out: 1000
HashMap: 2000
Start: 2000
return: 2000
Out: 2000
HashMap: 3000
Start: 3000
HashMap: 4000
Start: 4000
return: 4000
Out: 4000
HashMap: 5000
Start: 5000
return: 5000
Out: 5000
HashMap: 6000
Start: 6000
return: 6000
Out: 6000
End: 7000
Out: 3000
HashMap: 4000
在同一以下方法效果不错
私人诠释addComponents(HashMap的相关信息, 列表组件,整数阶,FacesContext的上下文 ){ IF((组件== NULL)|| components.isEmpty()) return order;
for (UIComponent c : components) { order = order + 1000; infos.put(c.getClientId(context), order); order = addComponents(infos, c.getChildren(), order, context); } return order;
}
为什么这两种方法的工作方式不同?
订单值正在作为addComponents(infos,c.getChildren(),** order **,context)在每个递归上传递。那么,它是不是也会反映在被调用的方法中呢? –
该方法的CALLED实例获取传入的值。但是,如果CALLED实例更新参数值,则CALLING实例不会看到此更新。 –