Проверка ввода ==null с помощью @NonNull против выпуска NPE

public void test(@NonNull String input){
    #1 log(input.length());
}
  1. Использование аннотации lombok @NotNull удаляет шаблонный код. Но если в качестве входных данных было передано значение NULL, оно также в конечном итоге выдает NPE (по умолчанию). Так какая разница в использовании @NonNull по сравнению с разрешением бросать NPE в строку #1?

public void test(String input){
if(input ==null){
    throw NPE;
}
log(input.length());
}
  1. На аналогичном замечании, если входное значение равно нулю, и с этим можно что-то сделать (например, установить значение по умолчанию или обойти блок, если значение равно нулю), то имеет смысл сделать явную проверку на нулевое значение. В противном случае есть ли смысл делать эту проверку. Лучше не делать нулевую проверку и не бросать NPE? Если ответ на этот вопрос - не проверять нулем, то почему существует Lombok @NonNull?

1 ответ

Решение

"Fail fast" поможет вам избежать нежелательных побочных эффектов. Что если ваш метод будет разыменовывать ваш нулевой параметр после 20 строк, а в пределах 19 строк ранее какое-то состояние уже было изменено (запись в файл журнала, запущенная транзакция, создание какого-либо файла или создание OutputStream)? В общем, вы не хотите, чтобы какое-либо из ваших выражений метода выполнялось, если контракт API (параметр не должен быть нулевым) был нарушен.

Другие вопросы по тегам