gfkauer:
Olá,
Estou gerando alguns relatórios de PMD e ajustando alguns itens que forem "aplicáveis" ao projeto sem nescessitar de uma mega reestruturação do código.
Um dos apontamentos que os relatórios geraram foi apontando a regra BeanMembersShouldSerialize, onde diz que um método que um método que não possui getters ou setters poderia ser transformado em transient. Por desconhecer a função de transformar algo em transient dei uma pesquisada e vi que este comando indica que uma variavel não seja serializada por não possuir nem gets nem sets.
Agora veio a pergunta, até que ponto é interresante tranformar-las em transients? No que isso irá influenciar dentro da minha rotina e quais os possiveis erros que encontrarei após a modificação? (se é que podem vir a existir erros)
Obrigado.
Amigo... bela confusão!
Vamos por partes... primeiro, métodos NÃO podem ser marcados como transient, só variáveis de instância. Quando você serializa um bean, a API serializa as variáveis de instância (posto que um bean é composto por seus atributos, certo?). Quando você desserializa um objeto, as variáveis são desserializadas junto, trazendo de volta o estado do bean. Se você marcar a variável de instância como transient, isso vai fazer com que ela não seja serializada, e você pode fazer isso por diversos motivos. Por exemplo:
1) A variável de instância não é serializável.
2) O valor da variável não é relevante.
No livro SCJP, da Kathy Sierra, o seguinte exemplo é apresentado (da maneira como me lembro):
class Horse implements Serializable {
private Collar collar;
//getters e setters
}
class Collar { //não serializável
}
O código acima não roda (mas compila, portanto, cuidado). Mas se você marcar Collar como transient, então, o código vai funcionar (lembrando que, na desserialização, o Collar não vai junto).
Bom... espero ter sanado algumas dúvidas. Qualquer coisa, só perguntar.
[]´s