需求背景
項目中有很多頁面,它們之間有父子關聯關係,在審覈查看某個頁面信息的時候,需要能看到該頁面的頁面路徑,即顯示該頁面的所有父頁面名稱,並按照依次順序用箭頭拼接起來;
技術實現
private String lastPathName = "";
/**
* 遞歸查找該頁面的是否有父頁面,並拼接成頁面路徑
* @param epgpage
* @param pathname
* @return
*/
public String findPathName(Epgpage epgpage,String pathname){
if(epgpage.getParentid() == null){
lastPathName = pathname;
return pathname;
}else{
Epgpage oneEpgpage = epgPageService.getEpgPageById(epgpage.getParentid());
pathname = oneEpgpage.getName()+"→"+pathname;
findPathName(oneEpgpage,pathname);
}
return pathname;
}
問題設立
1.如何結束循環;
2.return是結束本層還是結束整個流程;
問題分析
1.根據該頁面是否有parentid來判斷該頁面是否有父頁面,如果沒有父頁面,就結束循環,如果有父頁面,就獲取父頁面的名稱,並繼續執行遞歸調用,直至沒有父頁面爲止;
2.經過斷點調試查看,return只能跳出本層循環,還會接着去執行子頁面的遞歸方法,因此如果直接用retrun 返回拼接的路徑的話,最終這個值會被後面執行的遞歸方法改變,不可取;
問題解決
設置一箇中間變量,在滿足條件(即沒有父頁面時,將拼接的路徑賦值給這個臨時變量),這個時候,不用管後面的流程怎麼走,都不會再改變這個臨時變量的值,這樣在需要用到的地方就可以直接使用這個臨時變量了;
實現效果