gpt4 book ai didi

java - 惰性评估没有发挥应有的作用

转载 作者:行者123 更新时间:2023-12-02 06:50:27 25 4
gpt4 key购买 nike

我必须经常评估 boolean 表达式,因此我将其转换为类中的私有(private)方法。这是给我带来麻烦的代码:

//"x", "y" and "team" are already defined
return (map.isWalkable(x,y) &&
(!map.isOccupied(x,y) || map.getOccupant(x, y).getTeam() == team) );

就这个问题的目的而言,方法应该是不言自明的。现在,isWalkable 和 isOccupied 都返回 boolean 值,而 getOc​​cupant 是唯一返回对象引用的方法。问题是我在执行这段代码时遇到 NullPointerException,而这种情况不应该发生,因为当且仅当 map.getOc​​cupant != null (这实际上是该方法返回的内容)时 isOccupied 返回 true。因此,对于支持从左到右的惰性 boolean 求值的语言(我假设 java 是这样,或者至少这是我能够读到的), getOc​​cupant 方法在返回 null 时永远不应该被执行,对吧?

这是否比我想象的更依赖于编译器?如果我使用 if 语句会更安全,或者只是我在这里遗漏了一些明显的东西,也许操作会以相反的方式得到解决。

最佳答案

问题是你的括号。尝试一下

return (map.isWalkable(x,y) && (!map.isOccupied(x,y) || map.getOccupant(x, y).getTeam() == team));

关于java - 惰性评估没有发挥应有的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com