对 sling 和 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());
}
非常感谢任何帮助!
最佳答案
首先,仅当 page
为 null
时 ifAtRoot()
才会返回 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
结束。
关于java - 方法重复输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15911869/