É 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.
O que é vazamento no construtor?
5 Respostas
Copia a exceção e cola aqui, dai fica mais fácil entender o problema.
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
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.
talvez voce esteja criando os objetos com parametros que não existe no construtor.
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;
}
}