2
respostas

Dúvida sobre @Override

Considerando o código abaixo, quando eu sei que a main irá chamar o método close?? Ou o close é chamado automaticamente? Não entendi mt bem isso... Pq repare que tivemos que chamar o método leDados, mas o close não.

public class Conexao implements AutoCloseable{

    public Conexao() {
        System.out.println("Abrindo conexao");
    }

    public void leDados() {
        System.out.println("Recebendo dados");
            throw new IllegalStateException();
    }

    @Override
    public void close() {
        System.out.println("Fechando conexão");    
    }
}

public class TesteConexao {


    public static void main(String[] args) {

        try (Conexao conexao = new Conexao()){
            conexao.leDados();    
        } catch(IllegalStateException ex) {
        System.out.println("Deu erro na conexao");
        }
    }
}
2 respostas

Olá Caroline,

Acredito que com a minha resposta no outro tópico ficou um pouco mais claro, aqui eu só acrescentaria, que é automático, e faria um breve parenteses, que esse código:

        try (Conexao conexao = new Conexao()){

Não compilaria se Conexao não tivesse implementado a interface Autocloseable

Então o compilador sabe que obrigatoriamente a variável que colocamos dentro dos parenteses do try tem o método close, ai ele pode chamar sem problema nenhum, então você pode imaginar que a ultima linha é o conexao.close()

Abraços :)

Uma última dúvida: então, o java compila automaticamente todos os métodos de uma interface implementada? Ou isso é um caso específico do Autocloseable?