我正在编写 GC 友好代码来读取并向用户返回一系列byte[]
消息。在内部,我重复使用相同的实例ByteBuffer
,这意味着我将在大多数时间byte[]
重复返回相同的实例。
我正在考虑编写警示性 javadoc 并将其作为Iterator<byte[]>
. AFAIK 它不会违反Iterator
合同,但如果他们这样做并在每个位置Lists.newArrayList(myIterator)
返回一个List
相同的填充物,用户肯定会感到惊讶!byte[]
问题:对于一个可能发生变异并返回相同对象来实现接口的类,这是不好的做法吗?Iterator
如果是这样,最好的选择是什么?“不要改变/重用你的对象”是一个简单的答案。但它没有解决重用非常可取的情况。
如果不是,你如何证明违反最小惊讶原则是正当的?
两个小提示:
我正在使用番石榴
AbstractIterator
,所以 remove() 并不是真正值得关注的。在我的用例中,用户是我,并且此类的可见性将受到限制,但我已尝试将这个问题普遍地提出来,以便更广泛地应用。
更新:我接受 Louis 的回答,因为它的投票数是 Keith 的 3 倍,但请注意,在我的用例中,我打算采用我在 Keith 对生产的回答的评论中留下的代码。