O que é vazamento no construtor?

5 respostas
Galego_Henrique

É algum vazamento no método construtor ou esse construtor é referente a alguma outra coisa? É que meu netbeans está mostrando esta advertência ao lado de alguns registros do ActionListener.

5 Respostas

romarcio

Copia a exceção e cola aqui, dai fica mais fácil entender o problema.

R

Se você passa uma referência a “this” dentro de um construtor, quem recebe a referência está ganhando acesso a uma instância cuja construção ainda não acabou. Dependendo de como o receptor usa a referência, isso pode causar problemas.
http://stackoverflow.com/questions/9851813/java-leaking-this-in-constructor

Galego_Henrique

Infelizmente não tenho aqui, são anotações que eu faço ao estudar exemplos de livros e apostilas, e anotei o que estava mostrando no netbeans, assim que relembrar em qual apostila está o código eu posto.

klebson_lou

talvez voce esteja criando os objetos com parametros que não existe no construtor.

wID

Para resolver este problema crie um método final devolvendo o this.
Isto acontece porque quando o construtor está sendo executado pode ser que algo mude e não é seguro usar a instância da própria classe que ainda está sendo criada. No momento da criação o método chamado pode mudar algo na construção, portanto é necessário definir um método final. Métodos finais estão protegidos quanto a serem sobrescritos.

Exemplo:
Com vazamento:

public class MeuBotao extends JButton {

MeuBotao(){
     algumaCoisa(this); // vazamento no construtor
}
}

Corrigindo:

public class MeuBotao extends JButton {

MeuBotao(){
     algumaCoisa(getInstance());
}

public final JButton getInstance() {
        return this;
 }
}
Criado 25 de junho de 2012
Ultima resposta 3 de abr. de 2013
Respostas 5
Participantes 5