Java阻止返回null

时间:2013-04-14 19:30:27

标签: java performance

我对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
}

非常感谢任何帮助!

3 个答案:

答案 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)

您应该粘贴NullPointerException的堆栈跟踪,因为如果该异常来自getPath()或者它来自条件if (returnPages.getPath(...,那就不一样了。

这可能与您之前的question中的问题相同。

更新:(将我的评论移至此答案。) 是一个老问题(请参阅question)。句子“修改returnPages类将导致整个网站的多个冲突”根本没有意义,因为方法界面及其功能都没有改变。