Не поймать NullPointerException
.
A NullPointerException
является признаком того, что ваш код не соответствует какому-либо контракту. Если возможно, что game
может быть null
, то вам нужно сделать явный тест:
if(game != null) {
...
}
else {
...
}
Если game
не должен быть нулевым, вы можете убедиться в правильности своего кода, используя assert
.
assert game != null;
...
Что больше всего беспокоит, так это то, что game
кажется частным членом вашего класса. В этом случае game
, вероятно, не должно быть null
(хотя бывают случаи, когда это может произойти). Вы правильно инициализируете это в своем конструкторе? Я бы сказал, что первое, что вы должны сделать, это убедиться, что game
правильно инициализируется. В противном случае ваш код будет засорен ненужными null
-проверками. Например, что если gameWindow
в классе Game
не инициализирован должным образом? Для этого вам потребуется еще одна проверка null
:
if(game !== null && game.gameWindow != null) {
...
}
else {
...
}
Итак, вы должны сначала убедиться, что приватные члены вашего объекта инициализируются правильно. Если они есть, и оказывается, что для game
есть действительный вариант использования null
, то вам понадобится явная проверка null-
. Всегда лучше проверить на null
, чем поймать NullPointerException
. Кроме того факта, что исключения не должны использоваться для управления потоком вашей бизнес-логики, что, если допустимый NullPointerException
(из-за ошибки программирования) был сгенерирован где-то в цепочке? Теперь ваш catch
поймает это, и вы не будете знать об этом; это может привести к некоторым действительно неприятным и труднодоступным ошибкам.