2
respostas

Dúvida sobre o lançamento de exeções ao implementar interfaces

interface SampleCloseable {
    void close() throws java.io.IOException;
}
class Teste implements SampleCloseable {
    public void close() throws NullPointerException {}
}

Olá pessoal.

Gostaria de saber porque o código acima compila? Vi que ao implementar uma interface e algum de seus métodos lança uma exception, a implementação deve lançar a mesma exceção ou uma mais específica (uma filha (subclasse) daquela exceção). No código acima, a implementação do método close() está lançando um NullPointerException, que não é um filho de IOException. Por que o código compila?

2 respostas

Fala Carlos blz?!

Cara NullPointerException não extends IOException. Olha na Documentação: Ela extends RunTimeException. Por isso não compila;

Class NullPointerException

    java.lang.Object
        java.lang.Throwable
            java.lang.Exception
                java.lang.RuntimeException
                    java.lang.NullPointerException
public class NullPointerException
extends RuntimeException

Na verdade Igor, o código acima compila. O que fiquei em dúvida é porque compilou, sendo que NullPointerException não é um IOException, entedeu?