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

Exercício 3

Olá!

No exercício 3, a classe de exceção personalizada sugerida como resposta está diferente do que foi ensinado nas aulas e acabei não entendendo direito, pois rodando o código acabou dando o mesmo resultado.

Resposta sugerida:

class ErroConsultaGitHubException extends RuntimeException {

    public ErroConsultaGitHubException(String mensagem) {
        super(mensagem);
    }
}

Minha classe, de acordo com as aulas:

public class ErroConsultaGitHubException extends RuntimeException {
    String mensagem;

    public ErroConsultaGitHubException(String mensagem) {
        this.mensagem = mensagem;
    }

    @Override
    public String getMessage() {
        return this.mensagem;
    }

}

Na resposta do exercício, não precisou sobrescrever o método, nem criar o atributo. Por gentileza, poderia explicar passo-a-passo entre uma resposta e outra? Grato.

2 respostas
solução!

Olá, Sergio.

Tudo bem?

Entendo sua dúvida, e é realmente um ponto importante a se esclarecer. As duas classes de exceção que você mencionou, embora diferentes, estão corretas. A diferença entre elas está na forma como a mensagem de erro é tratada. Parabéns por praticar e conseguir fazer o desafio.

Vamos analisar. Na classe sugerida como resposta do exercício, a mensagem de erro é passada para a classe mãe (RuntimeException) através do método super(mensagem). Isso significa que a classe mãe já tem um atributo interno onde essa mensagem é armazenada e um método getMessage() que retorna essa mensagem. Portanto, não é necessário redefinir esses elementos na classe filha.

class ErroConsultaGitHubException extends RuntimeException {

    public ErroConsultaGitHubException(String mensagem) {
        super(mensagem); // Aqui a mensagem é passada para a classe mãe
    }
}

Já na sua classe, você optou por criar um novo atributo para armazenar a mensagem de erro e sobrescreveu o método getMessage(). Isso não é errado, mas acaba sendo desnecessário, já que a classe mãe já fornece esses recursos.

public class ErroConsultaGitHubException extends RuntimeException {
    String mensagem;

    public ErroConsultaGitHubException(String mensagem) {
        this.mensagem = mensagem; // Aqui você armazena a mensagem no seu próprio atributo
    }

    @Override
    public String getMessage() {
        return this.mensagem; // E aqui você retorna a mensagem do seu próprio atributo
    }
}

Portanto, a resposta sugerida no exercício apenas aproveita os recursos já fornecidos pela classe mãe, tornando o código mais enxuto. Mas ambas as abordagens vão funcionar corretamente.

Espero ter ajudado e bons estudos!

Ah maravilha.

Agora eu consegui entender perfeitamente, até pesquisando a classe mãe para entender melhor.

Muito obrigado!