Проверка ввода == null с помощью @NonNull против выпуска NPE - PullRequest
0 голосов
/ 11 мая 2018
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 Ответ

0 голосов
/ 11 мая 2018

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

...