Friday, October 17, 2008

FindBug x Eclipse = Eles também erram?

Essa semana eu mudei de "emprego". E no emprego novo, eu cheguei numa semana bem interessante: seminários pós-almoço, pra aproveitar melhor o ócio pseudo-produtivo. E aproveitando ainda o ócio pseudo-produtivo da minha primeira semana, eu resolvi postar algumas coisas interessantes.



No seminário de hoje, foram apresentadas ferramentas de inspeção de código. Entre elas, o CheckStyle, o PMD e o FindBug. Como o FindBug já estava instalado no ambiente, lá vou eu rodá-lo em cima de um projeto qualquer, e encontrei um fato interessante. O Generate Getters and Setters do eclipse não segue as "boas práticas" de programação, apesar de ser algo extremamente útil no dia a dia dos desenvolvedores. Note:

public class SomeClass {
private Timestamp someDate;
...
public Timestamp getSomeDate() {
return this.someDate;
}
...
}
Esse é o tipo básico de getter que o Eclipse gera. Entretanto, ele tem um problema. Ele retorna uma referencia direta para o membro someDate, que poderia ter seu valor alterado de maneira indiscriminada. O mais correto seria desta forma:

public Timestamp getSomeDate(){
return new Timestamp(this.someDate.getTime());
}


Neste caso, a instância retornada pelo método não é a mesma que a classe armazena, preservando assim a integridade dos seus dados. Analogamente, o setter gerado pelo eclipse:

public void setSomeDate(Timestamp someDate){
this.someDate = somedate;
}


Deveria ser implementado como:

public void setSomeDate(Timestamp someDate){
if (someDate != null) {
this.someDate = new Timestamp(somedate.getTime());
} else {
this.somedate = null;
}
}


Veja Também:

No comments:

Post a Comment

Regras são chatas, mas...
Todos os comentários são lidos e moderados previamente.
São publicados aqueles que respeitam as regras abaixo:

- Seu comentário precisa ter relação com o assunto do post;
- Em hipótese alguma faça propaganda de outros blogs ou sites;
- Não inclua links desnecessários no conteúdo do seu comentário;
- Se quiser deixar sua URL, comente usando a opção OpenID;
- CAIXA ALTA, miguxês ou erros de ortografia não serão tolerados;
- Ofensas pessoais, ameaças e xingamentos não são permitidos;