Java 方法复制输出
对sling和Java来说是个新手,所以我提前道歉。但是有人知道为什么当我在根的时候它会输出吗 我的路走了两次?奇怪的是,它只发生在绝对根上Java 方法复制输出,java,performance,sling,Java,Performance,Sling,对sling和Java来说是个新手,所以我提前道歉。但是有人知道为什么当我在根的时候它会输出吗 我的路走了两次?奇怪的是,它只发生在绝对根上 public static String generateTest(Page page, Page rootPage, String bc) { Page parent = page.getParent(); String bread = ""; bread += (parent != null) ? "<li>&
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());
}
publicstaticstringgenerateTest(Page-Page,Page-rootPage,stringbc){
Page parent=Page.getParent();
线面包=”;
面包+=(父项!=null)?“”:”;
面包+=“ ”+“ ”+bc;
返回(ifAtRoot(父,根页面))?面包屑:generateTest(父,根页面,面包);
}
公共静态布尔值IFATROT(页面,页面根){
返回(page==null | | root.getPath()==page.getPath());
}
非常感谢您的帮助 首先,ifatrot()
仅当页面
为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)附加到它。第二次调用ifatrout()
,为您的运气返回true。否则,您将进入无限递归并以StackOverflowError
结束 root.getPath()==page.getPath()
这里有些奇怪。请注意,这是AFAICS的副本,相同的代码格式不同。感谢回复@AlexR。虽然我对使用.equals代替==有点困惑,但似乎并没有改变任何事情。另外,如果我使用==而不是.equals(),这不会完全失败。谢谢你的帮助!