17 outubro 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:
Comentários
0 Comentários

0 comments:

Postar um comentário

Regras são chatas, mas...

- 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;