为什么"评估表达"在调试器中显示NPE,但实际代码在Intellij中运行良好?

时间:2015-01-28 19:57:26

标签: java jpa intellij-idea playframework jvm

我在IntelliJ中运行Play网络应用程序,在调试器端口9999上使用SBT。

我有一个User模型和一个Info模型,形成一对一的关系。每个User对象都包含一个Info对象。

当我运行应用程序并访问网页时,在IntelliJ的调试器中,当提取User user时,它的info字段仅填充{{ 1}}该信息条目的字段。因此,当我在iduser.info.address.equals()时,调试器会给出NPE,因为Evaluation Expression中的任何其他字段都不会填充,因此为空。

info

但是,当我单击User user = User.findById(id); // user.info only has id populated, with everything else null String addr = user.info.address; if (addr.equals(someVariable)) // NPE in Evaluate Expression, but no bug when it actually runs { // Do something } else { // Do something else } 并让代码转到时,应用程序实际运行而不是抛出NPE,并且Resume Program中的不同字段正确显示。

所以,这让我很困惑。如果它是一个懒惰的提取(所以info未填充,直到我们真正需要它),那么提取在哪里发生?上面的代码是紧挨着的,所以我想在之间不应该发生额外的数据库查询?

即使有一些查询发生,为什么info没有拿起它,只是说NPE?

0 个答案:

没有答案