方法重复输出

时间:2013-04-09 20:29:32

标签: java performance 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());
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

首先,ifAtRoot()仅在pagenull时才会返回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结束。