Итератор, который изменяет и возвращает один и тот же объект. Плохая практика?

Я пишу дружественный к GC код, чтобы читать и возвращать пользователю серию сообщений byte[]. Внутри я повторно использую тот жеByteBufferчто означает, что я буду неоднократно возвращать один и тот же byte[]экземпляр большую часть времени .

Я подумываю написать предостерегающий javadoc и представить его пользователю какIterator. Насколько я знаю, это не нарушит контракт Iterator, но пользователь наверняка удивится, если нарушитLists.newArrayList(myIterator)и получите обратно List, заполненный одним и тем же byte[]в каждой позиции!

Вопрос :является ли плохой практикой для класса, который может мутировать и возвращать один и тот же объект для реализации интерфейса Iterator?

  • Если да, то какова лучшая альтернатива? «Не видоизменяйте/не используйте повторно свои объекты» — простой ответ. Но это не касается случаев, когда повторное использование очень желательно.

  • Если нет, то как вы оправдываете нарушение принципа наименьшего удивления ?

Две второстепенные ноты:

  • Я использую ГуавуAbstractIteratorтак что удалить ()на самом деле не стоит.

  • В моем случае пользователь — это я , и видимость этого класса будет ограничена, но я попытался задать этот вопрос достаточно широко, чтобы применить его в более широком смысле.

Обновление:Я принимаю ответ Луи, потому что у него в 3 раза больше голосов, чем у Кейта, но обратите внимание, что в моем случае использования я планирую использовать код, который я оставил в комментарии к ответу Кейта для производства.

9
задан Brian Harris 15 August 2012 в 22:57
поделиться