Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Tipo da exceção lançada pelo construtor

Como foi mostrado na video aula e no exercício "Programando defensivamente", o tipo da exceção lançada pelo construtor é uma NullPointerException.

public Aluno(String nome, int numeroMatricula) {
    if (nome == null) {
        throw new NullPointerException("Nome não pode ser nulo");
    }
    // Resto do código
}

Lembro que em outro curso da plataforma, outro professor, comentando sobre a questão do tratamento de exceções, disse: "Não é uma boa prática deixar o tipo das exceções vazarem ao longo do programa" e que o ideal é encapsular a exceção original em uma RuntimeException. Seguindo essa ideia, o construtor poderia ficar da seguinte forma e continuaria funcionando normalmente:

public Aluno(String nome, int numeroMatricula) {
    if (nome == null) {
        throw new RuntimeException("Nome não pode ser nulo");
    }
    // Resto do código
}

Minha dúvida com relação a isso é: Como se trata do lançamento de exceções diretamente no construtor, ainda seria uma boa prática fazer o encapsulamento, ou deixar que a exceção seja a mais específica possível neste caso seria melhor?

4 respostas

Quanto mais específica, melhor. Assim quando ocorrer é possível ter mais clareza do que ocasionou.

Bom tarde André, obrigado pelo resposta.

Como ambos os tipos de lançamento nesse caso apresentam a mensagem "Nome não pode ser nulo", o motivo da exceção lançada fica claro de qualquer forma, não?

Além disso, se houver algum tipo de tratamento (try catch para tratamento local ou relançamento da exceção) onde foi chamado o construtor da classe Aluno, seria necessário que essa classe que chamou o construtor conhecer o NullPointerException (além de qualquer outra exceção específica que ele trate). Isso já começaria a entrar na categoria "o tipo das exceções vazarem ao longo do programa".

Veja que o nome RuntimeException diz que houve algum problema em tempo de execução, já o nome NullPointerException diz sobre a referência ser nula. Como "não há bala de prata", assim é preciso analisar o contexto e ponderar.

solução!

Dê uma olhada neste artigo: https://www.oracle.com/br/technical-resources/article/java/erros-java-exceptions.html