Java阻止返回null

Java阻止返回null,java,performance,Java,Performance,我对Java很陌生,所以请容忍我。基本上,我有一个名为“returnPages”的类,它返回您当前所在的父页面。问题是,当您处于最高级别或根目录时,它会抛出一个错误,从逻辑上讲,因为根目录没有父目录,所以它会抛出一个空指针异常。我如何防止在根目录下运行时抛出错误?我原以为下面的代码可以工作,但如果启动条件语句,我只会得到一个空指针异常。注意:我正试图在JSP中运行此操作,修改returnPages类将导致整个站点出现多个冲突。returnPages类还接受两个参数,第一个参数是父页面,后面是当前

我对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
}
Page rootPage=properties.get(“rootPage”,即“”);
if(returnPages.getPath(rootPage,currentPage)!=null){
List trail=returnPages.getPath(rootPage,currentPage);
}否则{
//在这里展示一些东西
}
非常感谢您的帮助

您可以使用

return Collections.emptyList<Page>();
return Collections.emptyList();
或者干脆

return new LinkedList<Page>();
返回新的LinkedList();
第一个选项返回一个不可变列表,因此尝试向该列表添加任何内容都将失败,并出现异常。不过,使用更少的内存并确保列表不被修改,这有时是一件好事

编辑:为什么要查找两次

List<Page> trail = returnPages.getPath(rootPage, currentPage);
if (trail == null) {
  trail = Collections.emptyList<Page>();
}
List trail=returnPages.getPath(rootPage,currentPage);
if(trail==null){
trail=Collections.emptyList();
}
您可以使用

return Collections.emptyList<Page>();
return Collections.emptyList();
或者干脆

return new LinkedList<Page>();
返回新的LinkedList();
第一个选项返回一个不可变列表,因此尝试向该列表添加任何内容都将失败,并出现异常。不过,使用更少的内存并确保列表不被修改,这有时是一件好事

编辑:为什么要查找两次

List<Page> trail = returnPages.getPath(rootPage, currentPage);
if (trail == null) {
  trail = Collections.emptyList<Page>();
}
List trail=returnPages.getPath(rootPage,currentPage);
if(trail==null){
trail=Collections.emptyList();
}
如果returnPages.getPath(rootPage,currentPage)抛出一个NPE来处理它。您无法检查它是否返回null

try {
   List<Page> trail = returnPages.getPath(rootPage, currentPage);
} catch (NullPointerException e){
   //show something here
}
试试看{
List trail=returnPages.getPath(rootPage,currentPage);
}捕获(NullPointerException e){
//在这里展示一些东西
}
关于java中未检查和已检查的异常有很大的争论。NullPointer是未经检查的异常,因此通常意味着程序员错误。有些人说你不应该抓住他们。您可以做的不是返回null,而是返回一个空列表

评论后编辑:

当您尝试访问空对象上的某些内容时,将抛出空指针。(这确实是一个NullReferenceException,但也有很多争论)

您要做的是检查方法返回的对象是否为null。在
returnPages.getPath(rootPage,currentPage)
中,它正在抛出一个NullPointerException,而不是返回它。(实际上,由于此错误条件而不返回任何内容并引发异常)。详细介绍了这一点。在较旧的语言中,会返回错误代码,以便您可以像现在这样进行检查。Java有一个异常处理框架,这就是为什么
getPath
的作者决定在返回页面时抛出异常而不是返回null的原因。getPath(rootPage,currentPage)抛出一个NPE来处理它。您无法检查它是否返回null

try {
   List<Page> trail = returnPages.getPath(rootPage, currentPage);
} catch (NullPointerException e){
   //show something here
}
试试看{
List trail=returnPages.getPath(rootPage,currentPage);
}捕获(NullPointerException e){
//在这里展示一些东西
}
关于java中未检查和已检查的异常有很大的争论。NullPointer是未经检查的异常,因此通常意味着程序员错误。有些人说你不应该抓住他们。您可以做的不是返回null,而是返回一个空列表

评论后编辑:

当您尝试访问空对象上的某些内容时,将抛出空指针。(这确实是一个NullReferenceException,但也有很多争论)


您要做的是检查方法返回的对象是否为null。在
returnPages.getPath(rootPage,currentPage)
中,它正在抛出一个NullPointerException,而不是返回它。(实际上,由于此错误条件而不返回任何内容并引发异常)。详细介绍了这一点。在较旧的语言中,会返回错误代码,以便您可以像现在这样进行检查。Java有一个异常处理框架,这就是为什么
getPath
的作者决定抛出异常而不是返回null

您应该粘贴该
NullPointerException
的堆栈跟踪,因为如果异常来自
getPath()
或者如果它来自条件
if(returnPages.getPath(…)

这可能与您之前的报告中的问题相同

更新:(将我的评论移至此答案。)
是一个老问题(请参阅)。句子“修改returnPages类将导致整个站点发生多个冲突”没有任何意义,因为方法接口及其功能都没有更改。

您应该粘贴该
NullPointerException
的堆栈跟踪,因为如果该异常来自
getPath()
或来自条件
if(returnPages.getPath(…

这可能与您之前的报告中的问题相同

更新:(将我的评论移至此答案。)
是一个老问题(请参阅)。句子“修改returnPages类将导致整个站点发生多个冲突”没有任何意义,因为方法接口及其功能都没有更改。

您可以检查该值是否为null,也可以捕获NullPointerException并以这种方式进行处理。很抱歉,没有足够的信息用于