Pergunta

Eu tenho método List<Foo> getFoos () que recebe os dados do servidor remoto e o retorna.

Claro, o usuário não deve alterar o número de itens da lista porque ele vai ter de dados não são sincronizados com os dados no servidor (e se ele quiser alterar o número de itens que ele tem métodos especiais, como addFoo ()).

Primeira abordagem foi a matriz de retorno e alteração do método de assinatura Foo[] getFoos ().Mas é mais comum em java e mais conveniente para o utilizador para operar com coleções então eu mudei a assinatura de List<Foo> getFoos ().Este método sempre retorna

Collections.unmodifiableList (originalList)

Assim, quando o usuário tentar alterar a lista que ele vai ter RuntimeException.

Há alguma recomendação sobre a api de design em casos semelhantes?

Foi útil?

Solução

Collections.unmodifiableList é perfeitamente aceitável e deve ser mais rápido (não há necessidade de criar uma matriz).

EDIT - Em termos de design da API, você deve apenas deixar seu javadoc claro! As pessoas que usam um método sem ler seu documento merecem a surpresa: P

Outras dicas

Eu também diria que é perfeitamente aceitável e muito melhor do que devolver uma matriz (que algum sugerir deve ser tratado como um tipo depreciado completamente). Se você quiser ser mais explícito sobre isso na API, no entanto, você pode considerar devolver um ImmutableList a partir de Coleções do Google.

Eu praticamente nunca mais voltar de uma pelada de lista ou matriz.Se você tem uma coleção de algo, quase sempre tem ALGUM código em algum lugar associado a ele que deve ser uma parte da coleção.Por não ter uma classe em torno da coleção que você está se forçando para duplicar esse código em diferentes locais onde a coleta é utilizado.

Há também, em geral, uma variável ou dois que estão associados com a coleção.Você vai achar que você passá-los sempre que você passar a coleção.Estes pertencem à classe de lógica de negócios que envolve a coleta.

Se você deseja uma propriedade especializada e personalizada de um objeto existente ou listar nesse caso, por que não tentar estendê -lo ou conter e fazer com que os acessores relevantes joguem uma exceção?

O motivo é porque você pode permitir que outros objetos do cliente modifiquem a lista; Depende de quão perto do nível do aplicativo são os dados retornados.

Se você tem liberdade completa e parece que o faz, não deve escolher entre a matriz ou a lista, em vez de devolver um iterador. Isso também ajudaria se você precisar de exclusividade, em vez de retornar o conjunto - ainda retornar o iterador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top