对吊索和Java很新,所以我提前道歉。但有没有人知道为什么当我在根源时它正在输出 我的路径两次?奇怪的是它只发生在绝对根处。
public static String generateTest(Page page, Page rootPage, String bc) {
Page parent = page.getParent();
String bread = "";
bread += (parent != null) ? "<li><a href=" + parent.getPath() + ">" + parent.getTitle() + "</a>" : "";
bread += "<li>" + "<a href=" + page.getPath() + ">" + page.getTitle() + "</a></li>" + bc;
return (ifAtRoot(parent , rootPage)) ? breadcrumb : generateTest(parent, rootPage, bread);
}
public static boolean ifAtRoot(Page page, Page root) {
return (page == null || root.getPath() == page.getPath());
}
非常感谢任何帮助!
答案 0 :(得分:1)
首先,ifAtRoot()
仅在page
为null
时才会返回true,因为您无法使用==
比较对象(包括字符串)。您应该使用.equals()
代替:
public static boolean ifAtRoot(Page page, Page root) {
return (page == null || root.getPath().equals(page.getPath()));
}
在您的情况下,ifAtRoot()
的第一次调用返回false
,因此您第二次调用它,递归传递刚刚创建的brend
。第二个调用再次创建brend
并将bc
(包含先前创建的brend)附加到其中。 ifAtRoot()
为您的运气第二次调用返回true。否则,您将进入无限递归并以StackOverflowError
结束。