我写了GC友好的代码来读取并返回给用户一系列的byte []消息.在内部我重复使用相同的
ByteBuffer
这意味着我将在大多数时候重复返回相同的字节[]实例.
我正在考虑写一个警告性的javadoc并将其暴露给用户作为Iterator<byte[]>
.AFAIK它不会违反Iterator的合同,但是用户肯定会惊讶,如果他们做了Lists.newArrayList(myIterator)
,并得到一个列表填充相同的字节[]在每个位置!
问题是:对于可能会变异并返回相同对象来实现Iterator接口的类,它是不好的做法吗?
>如果是这样,最好的选择是什么? “不要变异/重复使用你的对象”是一个简单的答案.但是,在重用是非常可取的情况下,并没有解决这种情况.
>如果没有,你如何证明违反principle of least astonishment的理由?
两个小笔记:
>我正在使用Guava的AbstractIterator
,所以remove()不是真的很关心.
>在我的用例中,用户是我,这个类的可见性将是有限的,但是我已经试图通过这个问题来广泛地应用.
更新:我接受路易斯的答案,因为它比基思的票数多3倍,但请注意,在我的用例中,我打算采取我留下的代码,对基思的生产答案.