ブール式を頻繁に評価する必要があったため、そのクラスのプライベート メソッドに変換しました。問題を引き起こしているコードは次のとおりです。
//"x", "y" and "team" are already defined
return (map.isWalkable(x,y) &&
(!map.isOccupied(x,y) || map.getOccupant(x, y).getTeam() == team) );
この質問の目的に関しては、メソッドはかなり自明である必要があります。現在、isWalkable と isOccupied はどちらもブール値を返し、getOccupant はオブジェクト参照を返す唯一のメソッドです。問題は、このコードを実行するときに NullPointerException が発生することです。 isOccupied は map.getOccupant != null の場合にのみ true を返すため (これが実際にそのメソッドが返すものです)。したがって、左から右への遅延ブール値評価をサポートする言語では (Java がそうであるか、少なくともそれを読み取ることができたと思います)、getOccupant メソッドは、null を返すときはいつでも実行されるべきではありません。
これは私が思っていたよりもコンパイラに依存していますか? if ステートメントを使用した方が安全な場合、または単にここに欠けている明らかな何かがある場合は、操作が逆に解決される可能性があります。