Я бы порекомендовал вам никогда не бросать NullPointerException
самостоятельно.
Основная причина не делать этого, как сказал Турбьёрн Равн Андерсен в комментарии ниже, заключается в том, что вы не хотите смешивать «настоящие, плохие NPE» с намеренно выброшенными NPE.
Итак, пока вы не уверены, что способны распознать «действительный» NPE, я бы рекомендовал использовать IllegalArgumentException
, если вы хотите сообщить своему API-пользователю, что null
не является допустимым значением аргумента.Поведение вашего метода при передаче недопустимых нулевых параметров должно быть задокументировано.
Другой (более современный imho) вариант - использовать @NotNull
аннотацию рядом с аргументом.Вот статья об использовании аннотации @NotNull .
Как я упоминал ранее, также могут быть случаи, когда бросание NPE не будет смущать ни вас, ни ваших товарищей по команде: причина NPEдолжно быть четким и узнаваемым.
Например, если вы используете какую-то библиотеку с модулем предусловий, например Guava
, то я обнаружу, что использование checkNotNull()
-подобных методов является предпочтительным способом борьбы с незаконно переданными нулями.
checkNotNull(arg, msg)
выбрасывает NPE, но из трассировки стека совершенно ясно, что он был создан Preconditions.checkNotNull()
и, таким образом, это не неизвестная ошибка, а скорее ожидаемое поведение.