Eu uso exceções para detectar problemas mais cedo. Por exemplo:
public int getAverageAge(Person p1, Person p2){
if(p1 == null || p2 == null)
throw new IllegalArgumentException("One or more of input persons is null").
return (p1.getAge() + p2.getAge()) / 2;
}
Meu programa nunca deve passar nullnessa função. Eu nunca pretendo. No entanto, como todos sabemos, coisas indesejadas acontecem na programação.
Lançar uma exceção, se esse problema ocorrer, permite que eu o localize e corrija antes que cause mais problemas em outros locais do programa. A exceção interrompe o programa e me diz "coisas ruins aconteceram aqui, corrija-as". Em vez disso, nullmudar o programa causando problemas em outros lugares.
Agora, você está certo. Nesse caso, nullisso simplesmente causaria uma NullPointerExceptionimediata, portanto pode não ser o melhor exemplo.
Mas considere um método como este, por exemplo:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Nesse caso, a nullcomo o parâmetro seria passado ao redor do programa e poderá causar erros muito mais tarde, o que dificilmente será rastreado até sua origem.
Alterando a função da seguinte maneira:
public void registerPerson(Person person){
if(person == null) throw new IllegalArgumentException("Input person is null.");
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Permite identificar o problema muito antes que ele cause erros estranhos em outros lugares.
Além disso, uma nullreferência como parâmetro é apenas um exemplo. Pode haver muitos tipos de problemas, de argumentos inválidos a qualquer outra coisa. É sempre melhor identificá-los mais cedo.
Portanto, minha pergunta é simples: essa é uma boa prática? Meu uso de exceções como ferramentas de prevenção de problemas é bom? É uma aplicação legítima de exceções ou é problemática?