我对Java很陌生,所以请耐心等待。基本上我有一个名为“returnPages”的类,它返回您当前所在的父页面。问题是当你处于最高级别或根据它抛出错误时,逻辑上是因为根没有父级会抛出空指针异常。如何防止在根目录时抛出错误?我认为下面的代码可以工作,但我只是得到一个空指针异常,我开始我的条件。注意:我正在尝试在JSP中运行它,修改returnPages类将导致整个站点出现多个冲突。 returnPages类还有两个参数,第一个是父页面,后跟你当前的页面。
Page rootPage = properties.get("rootPage", "");
if(returnPages.getPath(rootPage, currentPage) != null){
List<Page> trail = returnPages.getPath(rootPage, currentPage);
} else {
//show something here
}
非常感谢任何帮助!
答案 0 :(得分:4)
您可以使用
return Collections.emptyList<Page>();
或者只是
return new LinkedList<Page>();
第一个选项返回一个不可变列表,因此尝试向该列表添加任何内容都将失败并出现异常。你使用较少的内存并确保列表不被修改,这有时是一件好事。
编辑:为什么要进行两次查找?
List<Page> trail = returnPages.getPath(rootPage, currentPage);
if (trail == null) {
trail = Collections.emptyList<Page>();
}
答案 1 :(得分:1)
如果returnPages.getPath(rootPage,currentPage)正在抛出一个NPE,你可以处理它。你无法检查它是否返回null
try {
List<Page> trail = returnPages.getPath(rootPage, currentPage);
} catch (NullPointerException e){
//show something here
}
关于java中未经检查和检查的异常,存在很多争论。 NullPointer是一个未经检查的异常,因此通常意味着程序员错误。有人说你不应该抓住它们。你可以做什么而不是返回null是一个空列表
评论后编辑:
当您尝试访问null对象上的某些内容时,将引发空指针。 (这实际上是一个NullReferenceException,但又有很多争论)
您正在做的是检查方法返回的对象是否为null。在returnPages.getPath(rootPage, currentPage)
内部,它抛出一个NullPointerException - 不返回它。 (实际上由于此错误条件而返回任何内容并抛出异常)。 When to throw an exception?详细说明了这一点。在较旧的语言中,会返回错误代码,因此您可以像对待一样进行检查。 Java有一个异常处理框架,这就是getPath
的作者决定抛出异常而不是返回null的原因
答案 2 :(得分:0)