Best Practices: Always return a ____, never a ____の精神で、JDK1.4.2 から JDK5 などへの今後の移行で同様の質問に直面します。(はい、知っています。JDK1.4.2 は EOL です! ;-) )。
コレクション (単純なプロパティ コレクションではない) を返す関数の場合、(JDK1.4.2 では) 一般的な List ではなく Array を返すことを常に好みます。
- 返される型を強制します(オブジェクトのリストの代わりに、「コンパイル」レベルのように、静的で
MyObject[]
よりタイプセーフです) - 返されたコレクションに「読み取り専用」文字を提案します (これは c# の「読み取り専用」キーワードほど厳密ではありませんが、コレクションに要素を追加するのはより複雑です)。これは、配列内の参照を変更できるため、「不変」であると言っているのと同じではありません...
もちろん、私は常にこの返された配列を作成します(「内部」配列は公開しません)。
現在、JDK5以降では、必要に応じて使用できますList<MyObject>
。
MyObject[]
List の代わりに返すことを選択する、またはCollection<MyObject>
java5 でコーディングする場合の正当な理由は何ですか?
ボーナスをCollection<MyObject>
使用する場合、次のことは可能ですか。
- 返されたコレクションに読み取り専用属性を適用しますか? (いいえ
add()
またはremove()
可能) - 返されたコレクションに不変の側面を強制しますか? (そのコレクションの参照も変更できません)
PS: JavaGenericFAQにはそれがまったくありませんでした。