Um Iterator que sofre mutação e retorna o mesmo objeto. Mau prática?

Estou escrevendo código amigável do GC para ler e retornar ao usuário uma série debyte[] mensagens. Internamente eu reutilizo o mesmoByteBuffer o que significa que vou repetidamente retornar o mesmobyte[] instânciaa maior parte do tempo.

Estou pensando em escrever um javadoc e expor isso ao usuário como umIterator<byte[]>. AFAIK não vai violar oIterator contrato, mas o usuário certamente poderia se surpreender se eles fizeremLists.newArrayList(myIterator) e volte umList preenchido com o mesmobyte[] em cada posição!

A pergunta: é issomá prática para uma aula quepode sofrer mutação e retornar o mesmo objeto para implementar oIterator interface?

Se sim, qual a melhor alternativa? "Não mude / reutilize seus objetos" é uma resposta fácil. Mas não aborda os casos em que a reutilização é muito desejável.

Se não, como você justifica a violação doprincípio de menos espanto?

Duas notas menores:

Estou usando goiabaAbstractIterator então remove () não é realmente preocupante.

No meu caso de uso, o usuário émim e a visibilidade dessa classe será limitada, mas tentei perguntar isso em geral o suficiente para aplicar de forma mais ampla.

Atualizar: Estou aceitando a resposta de Louis porque ela tem 3x mais votos do que a de Keith, mas observe que no meu caso de uso estou planejando tomar o código que deixei em um comentário sobre a resposta de Keith à produção.

questionAnswers(3)

yourAnswerToTheQuestion