byte[]
一連のメッセージを読んでユーザーに返すためのGCフレンドリーなコードを書いています。内部的には同じものを再利用します。つまり、ほとんどの場合、同じインスタンスByteBuffer
を繰り返し返します。byte[]
注意のjavadocを作成し、これをユーザーに公開することを検討していますIterator<byte[]>
。契約に違反することはありませんが、違反した場合Iterator
、ユーザーは確かに驚かれる可能性がありLists.newArrayList(myIterator)
ます。List
byte[]
質問:同じオブジェクトを変更して返す可能性のあるクラスがインターフェイスを実装するのは悪い習慣ですか?Iterator
もしそうなら、最良の選択肢は何ですか?「オブジェクトを変更/再利用しないでください」は簡単な答えです。ただし、再利用が非常に望ましい場合については説明していません。
そうでない場合、驚き最小の原則に違反することをどのように正当化しますか?
2つのマイナーノート:
私はGuavaを使用している
AbstractIterator
ので、remove()は実際には問題ではありません。私のユースケースでは、ユーザーは私であり、このクラスの表示は制限されますが、より広く適用できるように、これを一般的に十分に尋ねようとしました。
更新:キースの投票数の3倍であるため、ルイの回答を受け入れていますが、私のユースケースでは、キースの本番環境への回答についてコメントに残したコードを使用する予定であることに注意してください。