Twitter

  • Antes era necessário ligar para pedir ativação por um dia por R$2,00, senão pagaria as taxas por bytes absurdas até então praticadas. 4 days ago
  • Agora sim, acesso do pré-pago TIM à Internet passa a custar R$0,50 por dia de uso automaticamente. http://j.mp/9I17Np 4 days ago
  • Então acho que é hoje que vou pra Marialva encher o tanque do veículo com o destilado. http://j.mp/9pycSk 4 days ago
  • More updates...

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

  • UtilizandoUnknown browser

    [...] no blog sobre a questão do retorno de coleção em getter de Javabean: http://ur1.ca/55lb [...]

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>