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: