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