0

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

任何帮助是极大的赞赏!

4

3 回答 3

4

您可以使用

return Collections.emptyList<Page>();

或者干脆

return new LinkedList<Page>();

第一个选项返回一个不可变列表,因此尝试向该列表添加任何内容都会失败并出现异常。虽然您使用更少的内存并确保列表没有被修改,这有时是一件好事。

编辑:你为什么要进行两次查找?

List<Page> trail = returnPages.getPath(rootPage, currentPage);
if (trail == null) {
  trail = Collections.emptyList<Page>();
}
于 2013-04-14T19:32:56.113 回答
1

如果 returnPages.getPath(rootPage, currentPage) 正在抛出 NPE,你必须处理它。您无法检查它是否返回 null

try {
   List<Page> trail = returnPages.getPath(rootPage, currentPage);
} catch (NullPointerException e){
   //show something here
}

关于 java 中的未检查和检查异常存在很大的争论。NullPointer 是未经检查的异常,因此通常意味着程序员错误。有人说你不应该抓住他们。你可以做的而不是返回 null 是返回一个空列表

评论后编辑:

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

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

于 2013-04-14T19:34:55.063 回答
0

You should paste the stacktrace of that NullPointerException because it is not the same thing if that exception comes from getPath() or if it comes from the condition if (returnPages.getPath(....

This might be the same issue as in your earlier question.

UPDATE: (Moving my comment to this answer.) This is an old issue (see the question). The sentence "modifying the returnPages class will result in multiple conflicts across the site" doesn't make sense at all since neither the method interface nor its functionality has changed.

于 2013-04-14T20:22:02.397 回答