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: