我想記下我的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實例不會看到此更新。 –