Arquivos mensais

Categorias

Retorno de coleção em getter de JavaBean

O seguinte texto foi na realidade uma mensagem postada hoje por mim no fórum interno do curso de pós-graduação em Desenvolvimento Orientado a Objetos em Java. Achei interessante deixar o registro no blog, principalmente por considerar que seu conteúdo possa ser útil a alguém, embora o assunto seja bastante técnico e específico para quem lida com a linguagem Java.



No meu trabalho de conclusão de curso da graduação, assumi desde o início um padrão onde sempre retornava o Iterator no getAlgumaColecao() dos objetos de domínio. Isso inspirado por lições da disciplina Linguagem e Técnicas de Programação III, no ano passado, ministrada pelo prof. Arthur Zavadki, que desde então já pregava a idéia de evitar expor a coleção. Depois de um tempo, como isto não era muito conveniente por não poder utilizar p. ex. for(”each..”), passei a retornar a própria coleção como Iterable, mas isto também não era interessante por ainda permitir que a coleção seja diretamente manipulada por quem invoque o método, bastando um typecast para Collection. Aliás, a rigor isto também pode ser considerado um problema com o retorno de Iterator, que permite remoção de elementos durante a iteração.

Como sugerido pelo prof. Cesar Moro na última aula (turma 1), uma alternativa é criar uma nova coleção contendo referências para os mesmos elementos, tendo que percorrer a coleção original para tanto. Data venia [1], achei que isso não era muito prático, então lembrei na mesma hora do método clone(), disponível em diversas classes, que [em tese] faz aquele mesmo trabalho.

Fui mexer hoje em uma parte da implementação do meu TCC onde um «Bean» possuía o método public Collection<Posse> getPosses(). O atributo posses é um HashSet. Fiquei curioso e corri atrás de outras possíveis soluções.

Deparei-me primeiro com o método toArray(T[]) da interface Collection, que poderia ser utilizado da seguinte forma:
public Posse[] getPosses() {
return posses.toArray(new Posse[0]);
}

Encontrei uma discussão a respeito do toArray() em um site, levantando inclusive questões sobre sua utilização em multi-threading.

Outra solução que encontrei em seguida, bem interessante, é o método estático Collections.unmodifiedCollection(Collection), que escolhi utilizar da seguinte maneira:
public Collection<Posse> getPosses() {
return Collections.unmodifiableCollection(posses);
}

Portanto, é como costuma dizer o prof. Cléber Lecheta (graduação):

Existem mil maneiras de preparar Neston[bb]: escolha a sua.

Enfim, a maneira que escolhi é realmente adequada? A idéia é encapsular a coleção para que não seja alterada fora da classe à qual pertence. E quanto a questões como performance e escalabilidade, o que diriam? Se os professores e os demais colegas puderem participar, desejo ouvir a voz da experiência e agradeço desde já.

1 comment to Retorno de coleção em getter de JavaBean

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>