我必须非常谨慎地评估一个布尔表达式,所以我将它转换为它的类中的私有方法。下面是它的代码是造成我的麻烦:懒惰的评估不正常,因为它应该
//"x", "y" and "team" are already defined
return (map.isWalkable(x,y) &&
(!map.isOccupied(x,y) || map.getOccupant(x, y).getTeam() == team));
方法应该是preety不言自明,作为这个问题的目的。现在,isWalkable和isOccupied都返回一个布尔值,而getOccupant是返回对象引用的唯一方法。问题是执行这段代码时我得到一个NullPointerException,并且不应该发生,因为isOccupied返回true当且仅当map.getOccupant!= null(实际上该方法返回)。所以使用支持从左到右的懒布尔值评估的语言(因为我认为java是,或者至少这是我能够读的),getOccupant方法永远不会执行,只要它会返回null我是吧?
这是更多的编译器依赖比我认为它是?如果我使用if语句更安全,还是有一些显而易见的错误,那么操作可能会相反。
我觉得你在getTeam()后有太多的右括号。 –
这很容易调试自己,为什么问这里?将每个subresult分配给它自己的变量并打印出来/测试它们为null。如果你很慢,这是一个3分钟的工作。 –
我很确定这不是原始代码(因为它与你的右括号有分析问题),所以我们怎么知道你确实没有犯另一个错误? –